Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Knockout.js 具有两个列表和一个筛选数组的淘汰排序表_Knockout.js_Jquery Ui Sortable - Fatal编程技术网

Knockout.js 具有两个列表和一个筛选数组的淘汰排序表

Knockout.js 具有两个列表和一个筛选数组的淘汰排序表,knockout.js,jquery-ui-sortable,Knockout.js,Jquery Ui Sortable,我正在尝试使用knockout-sortable插件处理两个html列表,这些列表基于一个knockout数组过滤成两个数组。我不断出现错误,我相信这可能与我返回的是“computed”而不是“observableArray”对象有关,但我还没有找到解决方案 我认为问题的主要部分在于: hiddenSeries = ko.computed(function() { { var seriesArray = self.series(); return ko.

我正在尝试使用knockout-sortable插件处理两个html列表,这些列表基于一个knockout数组过滤成两个数组。我不断出现错误,我相信这可能与我返回的是“computed”而不是“observableArray”对象有关,但我还没有找到解决方案

我认为问题的主要部分在于:

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());
        });
    }
});

可排序插件需要一个observableArray来操作,以便它可以将项目放回正确的位置

最好的办法可能是将数据拆分为两个ObservableArray,然后创建一个computed来表示组合的集合(如果需要将其发送回服务器)

也许是这样的:

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()); 
});
样本: