我正在使用KnockOut JS创建一个DataGrid和一个寻呼机。
寻呼机是这样的:
<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值的函数。其他一切都很好。但是,当页面更改时,链接的颜色不会更改。即使pageIndex发生变化,只有第一个li变为黑色,其余的变为蓝色。
提前致谢。
答案 0 :(得分:1)
如果更改可观察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。