我有两个ko.computeds列表,我想拖放,但也用按钮移动删除添加到列表。
但是我不能使它们同时使用dragndrop和按钮功能。
对于拖放我使用Ryan Niemeyers优秀的可排序库。
我想我需要让我的计算机可写,但这是我卡住的地方,似乎无法摆脱错误“拼接不是计算机的函数”。
因此,通过拖放进行排序失败。
这是其中一台电脑:
this.availableTexts = ko.computed({
read: function(){
return ko.utils.arrayFilter(self.texts(), function(text) {
return text.sceneID() === null;
})
},
write: function(value){
return value;
},
owner: this
});
答案 0 :(得分:1)
Niemeyer的可淘汰排序库可与splice
内部配合使用,以对项目数组(source)进行排序。我相信它不会对计算机有效,即使它返回一个数组并且具有正确的写入方法......
我建议使用visible
绑定来隐藏单个项目。您必须公开projectID
或映射您的项目以包含如下计算:
var projectID = 1;
self.allScenes = ko.observableArray(scenes.map(function(scene) {
return Object.assign({}, scene, {
isVisible: ko.computed(function() {
return scene.projectID === projectID;
});
});
或者,在viewmodel中:
self.projectId = 1;
HTML中的:
<li data-bind="visible: projectID === $parent.projectId"> ... </li>
答案 1 :(得分:1)
请参阅:https://stackoverflow.com/a/16464935/4024558
您可以使用observableArray.filter
代替computed
。
突然间,我无法分叉你的小提琴。所以你可以用这个http://pastebin.com/jjNQ39nJ替换你的js,它会起作用。