2012-11-12 30 views
1

我有一個ViewModel包含兩個數組:arr1arr2。我想arr2準確地包含arr1包含的內容。我怎樣才能做到這一點?使用knockout.js將兩個數組綁定到彼此

var myViewModel = function() { 
    this.arr1 = ko.observableArray([]); 
    this.arr2 = ko.observableArray(this.arr1); //Doesn't work - I need to bind arr2 to changes in arr1 
} 

回答

3

如果你想存儲參考數組元素使用時應拆開包裝觀察到:

var myViewModel = function() { 
    this.arr1 = ko.observableArray([]); 
    this.arr2 = ko.observableArray(this.arr1()); 
} 

如果要克隆數組使用數組Slice功能:如果你想先複製

var myViewModel = function() { 
    this.arr1 = ko.observableArray([]); 
    this.arr2 = ko.observableArray(this.arr1.slice(0)); 
} 
+0

有沒有一種方法,使得兩個陣列將更新對方喜歡在ARR1變化將設置ARR2和變化在arr2中將設置arr1(它不必更改數組,兩個數組都可以操作一個數組)? – Naor

1

陣列到第二個一次您可以打包arrya的副本,使用函數ko.toJSko.toJSON

var myViewModel = function() { 
    this.arr1 = ko.observableArray([]); 
    this.arr2 = ko.observableArray(ko.toJS(this.arr1)); 
} 

如果你想每次更改第二個數組,首當是改變了使用用戶

var myViewModel = function() { 
    this.arr1 = ko.observableArray([]); 
    this.arr2 = ko.observableArray([]); 
    this.arr2.subscribe(function(newValue) { 
     this.arr2(ko.toJS(this.arr1)); 
    }); 
} 
+0

我喜歡存儲對數組元素的引用。 @Artem Vyshniakov幫助我。謝謝! – Naor