2014-10-19 42 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

相關問題