1

我有一个包含两个数组的 ViewModel:arr1arr2. 我想arr2准确地包含所arr1包含的内容。我怎样才能做到这一点?

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
}
4

2 回答 2

3

如果要存储对数组元素的引用,请使用 unwrap observable:

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)); 
}
于 2012-11-12T09:51:45.900 回答
1

如果您想将第一个数组复制到第二个您可以使用函数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));
    });
}
于 2012-11-12T10:07:44.333 回答