0

ノックアウト ソート可能プラグインを使用して、2 つの配列にフィルター処理された 1 つのノックアウト配列に基づく 2 つの html リストを操作しようとしています。エラーが発生し続け、「observableArray」オブジェクトではなく「計算済み」オブジェクトを返すという事実に関係していると思われますが、解決策を見つけることができませんでした.

http://jsfiddle.net/thebassix/Eg2DG/4/

問題の主な部分は次のとおりだと思います。

hiddenSeries = ko.computed(function() {
    {
        var seriesArray = self.series();
        return ko.utils.arrayFilter(seriesArray, function(item) {
            return item.Hidden();
        });
    }
});

unhiddenSeries = ko.computed(function() {
    {
        var seriesArray = self.series();
        return ko.utils.arrayFilter(seriesArray, function(item) {
            return !(item.Hidden());
        });
    }
});
4

1 に答える 1

2

ソート可能なプラグインは、アイテムを正しい場所に戻すことができるように、操作するためにobservableArrayを必要とします。

最善の策は、おそらくデータを2つのobservableArrayに分割し、結合されたセットを表す計算を作成することです(サーバーに送り返す必要がある場合)。

多分次の線に沿った何か:

var data = ko.mapping.fromJSON('[{"__type":"mediacenter+Series","ID":1,"Name":"seriesname232","Hidden":true,"MediaCenterID":1,"_destroy":false},{"__type":"mediacenter+Series","ID":2,"Name":"kjhkuhkuh","Hidden":false,"MediaCenterID":1,"_destroy":false},{"__type":"mediacenter+Series","ID":3,"Name":"trrde","Hidden":false,"MediaCenterID":1,"_destroy":false},{"__type":"mediacenter+Series","ID":4,"Name":"1","Hidden":true,"MediaCenterID":1,"_destroy":false}]', mappingOptions);

//take one pass through the records and put them in the appropriate bucket
var hidden = [], 
    unhidden = [];

ko.utils.arrayForEach(data(), function(item) {
    if (item.Hidden()) {
       hidden.push(item);   
    }
    else {
       unhidden.push(item);   
    }
});

self.hiddenSeries = ko.observableArray(hidden);
self.unhiddenSeries = ko.observableArray(unhidden);

//define series as the two lists together
self.series = ko.computed(function() {
   return self.hiddenSeries().concat(self.unhiddenSeries()); 
});

サンプル: http: //jsfiddle.net/rniemeyer/NhUEm/

于 2012-12-03T17:53:42.743 に答える