1

これを説明する簡単な例があります。単にアイテムの配列を保持するaを取ります。各行には、監視可能なプロパティ(この場合は日付)があります。uiは、ソートされたアイテムのセットにバインドされます。これは、計算されたオブザーバブルです。この計算されたオブザーバブルは、行をフィルターで除外する計算されたオブザーバブルを監視しています。

なぜこれが希望どおりにカスケードされないのですか?

//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

コードではすべてが正常に機能しています。「2月」は除外されているため、表示されません。

このpush()メソッドは、新しいアイテムを最後の位置に挿入します。ただしself.filtered、位置0、1、2のアイテムのみが表示されます。ただしpush、コードを呼び出すと、新しいアイテムは位置4に挿入されるため、表示されません。

「2月」を表示したい場合は、以下を使用できますunshift

myObservableArray.unshift('Some new value')は、配列の先頭に新しい項目を挿入します

だからあなたのコードでは:

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

これが更新されたJSFiddleです。

于 2013-01-14T19:23:51.170 に答える