2012-07-27 60 views
1

我有Knockout.js视图模型具有嵌套可观察数组。如何更新Knockout.js视图模型与服务器

function ParentVM(data) { 
     var self = this; 

     self.childs= ko.observableArray([]); 
     ko.mapping.fromJS(data, mapping, this); 
    } 

    function ChildVM(data) { 
     var self = this; 

     self.propertyA = ko.observableArray([]); 
     self.propertyB = ko.observable(); 

     ko.mapping.fromJS(data, mapping, this); 
    } 

    function GrandChildVM(data) { 
     var self = this; 

     self.propertyX = ko.observable(); 
     self.propertyY = ko.observable(); 
     self.propertyZ = ko.observable(); 

     ko.mapping.fromJS(data, mapping, this); 
    } 

我有以下绑定:

data-bind="value: propertyX, valueUpdate: 'keydown'" 

现在,我怎么可以添加事件处理程序调用我的REST端点来更新视图模型状态时,这些属性的变化?

回答

1

如果我理解正确的话,这是你可以做什么:

function ChildVM(data) { 
    var self = this; 

    self.propertyA = ko.observableArray([]); 
    self.propertyB = ko.observable(); 

    ko.mapping.fromJS(data, mapping, this); 

    self.propertyA.subscribe(function (newValue) { /* call you're api with new value! */ }); 
    self.propertyB.subscribe(function (newValue) { /* call you're api with new value! */ }); 
} 
+0

是的,但是这似乎并没有工作。订阅的回调不会被调用。 – Fdr 2012-07-27 11:23:51

+1

这没有任何意义,模型是否正确绑定?参数中的任何值是否显示在UI中? – 2012-07-27 11:29:58

+0

谢谢,问题是当数据初始化时它没有使用提供的映射。将ko.mapping.fromJS(数据)更改为ko.mapping.from(数据,映射)可解决问题并订阅属性。 – Fdr 2012-07-27 11:49:59