温馨提示:本文翻译自stackoverflow.com,查看原文请点击:knockout.js - Knockout update only part of the viewmodel
knockout.js knockout-mapping-plugin

knockout.js - 淘汰赛仅更新视图模型的一部分

发布于 2020-03-27 11:27:31

让我们假设一个来自JS的viewmode

var js = { 
            Foo1 : {
                BarA : 'text',
                BarB : 'other text' },
            Foo2 : {
                BarC : 'some text' }}; 

 var vm = ko.mapping.fromJS(js);
  ko.applyBindings(vm);

现在我可以做

vm.Foo1.BarB('hello world');

我也可以做这样的事情

var js = { 
            Foo1 : {
                BarA : 'text',
                BarB : 'hello world' },
            Foo2 : {
                BarC : 'some text' }}; 

 ko.mapping.fromJS(js, vm);

两种方案都将更新绑定到vm.Foo1.BarB的任何字段

我想做的是

var foo = {
               BarA : 'text',
               BarB : 'hello world' }; 

     ko.mapping.fromJS(foo, vm.Foo1);

这行不通,我也试过

vm.Foo1(ko.mapping.fromJS(foo));
//and
vm.Foo1 = ko.mapping.fromJS(foo);

他们都没有工作。

我需要这样做,因为在我的真实场景中,我的模型是从Web服务返回的,更新Foo1和Foo2也都返回了,并且我不需要太多的自定义映射。

查看更多

查看更多

提问者
Stijn Van Antwerpen
被浏览
38
Stijn Van Antwerpen 2019-07-03 20:09

显然,还有一些神秘的附加参数。

ko.mapping.fromJS(foo, {}, vm.Foo1);

我不知道第二个参数的作用,但是如果使用它,它就可以正常工作。

https://stackoverflow.com/a/29598785/2968001