我正在尝试使用knockout sortable插件来处理基于一个淘汰数组的两个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());
});
}
});
答案 0 :(得分:2)
可排序插件需要一个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());
});