knockout js $ index()绑定不起作用

时间:2013-09-19 09:59:48

标签: knockout.js

我正在使用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变为黑色,其余的变为蓝色。

提前致谢。

1 个答案:

答案 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