2014-10-19 52 views
0

我想比较两个可观察数组。 但是,ko.utils.compareArrays无法为我提供两个可观察数组之间的不同元素。比较两个可观察数组给出null,尽管有不同的元素

这里是我的fiddle

var ViewModel = function() { 
var self = this; 
self.y= ko.observableArray(["", "a","b","e","d"]); 
self.x = ko.observableArray(["a","b","e"]); 

self.differ=ko.utils.compareArrays(x,y); 

} 

难道我错过了somethig。

回答

1

应该ko.utils.compareArrays(self.x(),self.y())

x和y没有声明。只有self.x和self.y是。此外,它们是可观察阵列,因此您需要对它们进行评估,即self.x()

之后,您会注意到差异是在状态属性中包含不同值和包含该值的值的对象中构造的。只显示的项目加入您可以使用,如果在您的视图:

<div class='liveExample'> 
    <ul data-bind="foreach:differ"> 
     <!-- ko if: status == 'added' --> 
     <li data-bind="text:'\'' + value + '\''"></li> 
     <!-- /ko --> 
    </ul> 
</div> 

这个js拨弄会显示添加的项目:http://jsfiddle.net/L8fq57q9/5/

+0

感谢韦恩。我不好,我错误地更新了它。新[小提琴](http://jsfiddle.net/L8fq57q9/)。正如你所看到的,我无法获得数组之间的不同元素。 – 2014-10-19 02:47:50

+0

所以当它显示对象时,这意味着差异在对象中。找出问题的简单方法是将其调整到浏览器中的控制台。 http://jsfiddle.net/L8fq57q9/2/然后在你的浏览器中调出开发者工具,你可以看到对象的结构。然后您可以相应地调整您的视图 – 2014-10-19 02:54:16

+0

我看到不同的元素具有添加状态。那么所有不同的元素都将具有“已添加”的状态?如果是这样,我们可以过滤出“已添加”状态的元素。 – 2014-10-19 03:05:46

相关问题