敲除可排序具有两个列表和一个滤波阵列(Knockout Sortable with two list

2019-10-17 10:58发布

我试图用淘汰赛插件排序与基于关闭过滤成两个阵列一个淘汰赛阵列的两个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());
        });
    }
});

Answer 1:

可排序插件需要一个observableArray进行操作,以便它可以将物品放回正确的位置。

你最好的选择可能是将数据分割成两个observableArrays,然后创建一个计算,以代表被组合组(如果你需要将其发送回服务器)。

也许沿线的东西:

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/



文章来源: Knockout Sortable with two lists and one filtered array