我正在使用KnockOut JS创建一个DataGrid和一个Pager。
寻呼机是这样的:
<ul class="grdPager" data-bind="foreach: new Array(StudentGridSettings().totalPages)">
<li><a href='#' data-bind="click: function() {TurnStudentListPage($index()+1)}, text: ($index()+1), style: { color : ($index()+1) == StudentGridSettings().pageIndex ? 'black' :'blue'} "></a></li>
</ul>
Dashboard.TurnStudentListPage(i) 是一个更改 Dashboard.StudentGridSettings().pageIndex 值的函数。其他一切正常。但是,当页面更改时,链接的颜色不会更改。只有第一个 li 变为黑色,即使页面索引发生变化,其余部分也保持蓝色。
提前谢谢。
如果您更改可观察 KO 内的属性值,则不会收到通知。因此,即使您StudentGridSettings
是可观察的,如果您编写StudentGridSettings().pageIndex = something
KO也不会知道StudentGridSettings
已被更改,因此它不会更新您的绑定。
您可以使用 valueHasMutated
方法触发绑定,因此您需要将TurnStudentListPage
更改为如下所示:
self.TurnStudentListPage = function(index){
self.StudentGridSettings().pageIndex = index;
self.StudentGridSettings.valueHasMutated();
}
演示 JSFiddle。
或者只需将 pageIndex
属性声明为 ko.observable
并在绑定中使用:
data-bind="style: { color : ($index()+1) == StudentGridSettings().pageIndex() ? 'black' :'blue'}"
演示 JSFiddle。