1

我有一个简单的例子来说明这一点。取一个简单地保存一组项目的 a 。每一行都有一个可观察的属性,在这种情况下是一个日期。ui 绑定到一组排序项,这只是一个计算的 observable。这个计算出的 observable 反过来正在监视一个计算出的 observable,它将过滤掉行。

为什么这不能按需要级联?

//simple table model
var TableModel = function(){
var self = this;
self.items = ko.observableArray([
new TableRowModel(5),
new TableRowModel(2),
new TableRowModel(9),
new TableRowModel(7)
]);
 self.filtered = ko.computed(function(){
return [self.items()[0], self.items()[1], self.items()[2]];
 });
 self.sortedItems = ko.computed(function(){
return _.sortBy(self.filtered(), function(item){
    return item.value();
});
});
};

var TableRowModel = function(value){
  var self = this;

self.value = ko.observable(new Date(2013, value, 1));
};

var model = new TableModel();
ko.applyBindings(model);

model.items.push(new TableRowModel(1));
4

1 回答 1

1

在您的代码中一切正常。“二月”不存在,因为它被过滤掉了。

push()方法将新项目插入到最后一个位置。但是在您的系统中,self.filtered您只显示位置 0、1、2 的项目。但是当您push在代码中调用时,新项目将被插入位置 4,因此不会显示。

如果您想显示“二月”,您可以使用unshift

myObservableArray.unshift('Some new value') 在数组的开头插入一个新项

所以在你的代码中:

model.items.unshift(new TableRowModel(1));

这是一个更新的JSFiddle

于 2013-01-14T19:23:51.170 回答