ObservableArray不会在函数外反映其值

时间:2014-05-28 15:53:49

标签: javascript knockout.js reference scope

this example中,您可以看到我启动空observableArray([])然后在2秒后更新它,然后单击按钮,您可以看到直接引用为我提供空数组和在对象内调用的函数实际价值。

为什么会这样?如何在外面获得直接参考?

注意:我需要使用ko.mapping.fromJS(ko.toJS(self.orig)),因为我想复制数据,因此它不会链接到原始数组。

代码:

var vm = function(){
    var self = this;
    self.orig = ko.observableArray([{
        somevalue: ko.observable("testst")
    }]);

    self.diff = ko.observableArray([]);

    self.init = function() {
        self.diff = ko.mapping.fromJS(ko.toJS(self.orig));
    }

    setTimeout(self.init,2000);

    return {
        check: function() { alert(self.diff());console.log(self.diff());},
        diff: self.diff
    }
}

更新

似乎问题是我需要改变这个

self.diff = ko.mapping.fromJS(ko.toJS(self.orig));

到这个

ko.mapping.fromJS(ko.toJS(self.orig),{},self.diff);

1 个答案:

答案 0 :(得分:0)

我看到了这个问题。

您没有设置KO数组self.diff的值。您实际上只是将它设置为等于它,当您这样做时,它不再是您初始化的KO可观察数组。

此外,据我所知,ko.toJS创建了一个普通的JS副本,因此您不需要ko.mapping.fromJS调用。

//What you are doing
self.diff = ko.mapping.fromJS(ko.toJS(self.orig));

//What you need to do
self.diff(ko.toJS(self.orig));

在此处更新了JSFiddle:http://jsfiddle.net/VGqvx/6/