2013-02-27 48 views
0

我不知道是否有任何的方式来更新与单个对象的整个视图模型。
例如,说我们的视图模型如下:淘汰赛JS设置multple观测在一起

Function ExampleViewModel(){ 
    this.name = ko.observable(); 
    this.lastname = ko.observable(); 
    this.phone = ko.observable(); 
    } 
    var viewmodel = new ViewModel(); 
    ko.applyBindinings(viewmodel); 

然后假设我创建这样一个对象:

var newObject = {name: "newname", lastname: "lastname", phone: 432} 

而不是设置单独的每个观察到的如下:

 viewmodel.name(newObject.name); 
      or 
     viewmodel.name(newObject.name).lastname(newObject.lastname) etc etc 

我可以更新整个viewmodel:

 viewmodel.update(newObject)? 
+2

映射插件可以帮助促进这一点。尽管如此,我认为它仍然会根据需要重新呈现每一次更改的页面。 – 2013-02-27 21:07:09

回答

1

通过对象只是循环:

for (var key in newObject) { 
    if (viewModel[key] && ko.isObservable(viewModel[key])) { 
     viewModel[key](newObject[key]); 
    } 
} 
+0

您应该至少检查一下'viewModel'上的属性实际上是否是可观察的。在这里看到:http://stackoverflow.com/questions/9625591/determine-if-an-object-property-is-ko-observable – 2013-02-27 21:11:59

+0

你说得对,我把它添加到答案 – sroes 2013-02-27 21:20:48

+0

是,有很好的理由去用这个而不是使用映射插件? – 2013-02-27 22:21:18