2015-04-12 84 views
0

如何更新映射模型的一部分?更新部分映射模型

var model = { foo: { bar: "hello" }, moo: { la: "world" }}; 
var mapped = ko.mapping.fromJS(model); 

繪製結果:

mapped = 
{ 
    __ko_mapping_object__ : object, 
    foo: { 
     bar : function c() 
    }, 
    moo: { 
     la: function c() 
    }, 
    __proto__ : object 

} 

由於foomoo觀察不到,如果我這樣做:

mapped.foo = { "bar" : "changed" }; 

mapped.foo = ko.mapping.fromJS({ "bar" : "changed" }); 

的對象被更新但重新綁定不會被觸發。

任何想法?我需要綁定來更新模型的一部分。

我的一個想法是抓取部分模型,然後強制重新綁定。

triggerObjectRebind(mapped.foo); 

function triggerObjectRebind(model) { 
    for (var property in model) { 
     if (model.hasOwnProperty(property)) { 
      if (typeof model[property] === "object") { 
       triggerObjectRebind(model[property]); 
      } else if (typeof model[property] === "function") { 
       model[property].valueHasMutated(); 
      } 
     } 
    } 
} 

回答

1

當您進行更新時,您需要將映射對象作爲參數傳遞。相應的屬性將被更新。

var model = { 
    foo: { bar: "hello" }, 
    moo: { la: "world" } 
}; 
var mapped = ko.mapping.fromJS(model); 

var newFoo = { bar: "changed" }; 
// do the update on the foo object 
ko.mapping.fromJS(newFoo, {}, mapped.foo); 
+0

謝謝你好先生 – Gabe