2011-05-17 40 views

回答

1

一旦我在jsFiddle中添加了一个资源给knockout js文件,选择的填充工作就可以正常工作。我用http://knockoutjs.com/js/knockout-1.2.0.js

好的,我编辑了我的答案,并删除了大部分内容,一旦我意识到我错误理解了@ hyperslug的回复,然后去制作几乎完全相同的代码! @ hyperslug的答案,比我的稍好一些,因为我没有意识到removeAll会返回一个已删除项目的数组。

除了@ Hyperslug的回答,你也有一个按钮的启用状态的问题。在页面加载,这是通过

new ko.observableArray(), 

代替

new ko.observableArray([""]), 

后者解决创建,而不是0。

长度为1的可观察到的阵列为了获得按钮使能状态中之后的所有改变物品没有被检查,你似乎需要清除无效的高光或选择高光。 removeAll()再次拯救。 this.availHighlight.removeAll() 或 this.selectHighlight.removeAll()

在回答为什么@ hyperslug的$。每()的代码没有工作,这是因为一个jQuery内的每个()匿名函数,'this'是指集合中的项目,而不是viewModel实例。

$.each(removed, function(i,r){ 
     //'this' is now the same as 'r', so the following line doesn't work as intended 
     this.available.push(r); 
    }); 

希望这有助于

+0

这是绝招谢谢! – Razcer 2011-05-18 13:59:52

+0

我编辑了JSFiddle以使其正常工作。 – Razcer 2011-12-01 14:41:04

1

注意removeAll()返回删除的项目阵列。其次,没有相应的pushAll()。此外,事实证明,没有必要关闭突出显示,可能是因为您正在删除元素。

var removed = this.available.removeAll(this.availHighlight()); 
for(var i = 0; i < removed.length; i++) { 
    this.selected.push(removed[i]); 
} 
//this.availHighlight([""]); 

演示在这里:http://jsfiddle.net/7HyZC/

应该已添加工作(但并没有为我):

$.each(removed, function(i,r){this.selected.push(r);}); 

我不能有我each力学正确的地方..