我有一个JSON数组,两个列表(由计算的observable填充)和一个选定项目数组(JSON数组中的项目ID)。
所选项目保存在observableArray中,我想要一个列表填充数组中的项目,另一个列表将由数组中的所有项目填充。
这适用于初始化,但如果我尝试将项目添加到所选项目数组,则更改不会反映在UI或两个列表数组中。
https://jsfiddle.net/mnbu21z4/3/
var witnessJSON = [
{"id":3,"name":"Bob3"},
{"id":2,"name":"Bob2"},
{"id":1,"name":"Bob1"}
];
var viewModel = function() {
self = this;
self.witnessArray = ko.observableArray([1]);
self.witnessesAdded = ko.computed(function() {
return ko.utils.arrayFilter(witnessJSON, function(witness) {
return self.witnessArray().indexOf(witness.id) > -1;
});
});
self.witnessesPool = ko.computed(function() {
return ko.utils.arrayFilter(witnessJSON, function(witness) {
return self.witnessArray().indexOf(witness.id) == -1;
});
});
}
myViewModel = new viewModel();
ko.applyBindings(myViewModel);
viewModel.witnessArray.push(2);
有人能指出我正确的方向吗?
答案 0 :(得分:1)
您的示例中似乎已经拼错了myViewModel
。
改变这个:
myViewModel = new viewModel();
ko.applyBindings(myViewModel);
viewModel.witnessArray.push(2);
对此:
var myViewModel = new viewModel();
ko.applyBindings(myViewModel);
myViewModel.witnessArray.push(2);
然后你的小提琴例子将起作用。我已做出这些更改并更新了您的fiddle,它确实有效。
您可能希望查看淘汰赛投影插件,它可以让您以更有效的方式实现同样的目标。看一下这个SO answer