敲除 js $index() 绑定不起作用



我正在使用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。

最新更新