【问题标题】:How to update Knockout.js view model with server如何使用服务器更新 Knockout.js 视图模型
【发布时间】:2012-07-26 00:02:07
【问题描述】:

我有嵌套可观察数组的 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 端点来更新视图模型状态?

【问题讨论】:

    标签: asp.net-mvc-3 knockout.js knockout-mapping-plugin


    【解决方案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! */ });
    }
    

    【讨论】:

    • 是的,但这似乎不起作用。订阅的回调不会被调用。
    • 这没有任何意义,模型绑定正确吗?参数中的任何值是否会显示在 UI 中?
    • 谢谢,问题是初始化数据时没有使用提供的映射。将 ko.mapping.fromJS(data) 更改为 ko.mapping.from(data, mapping) 修复了问题并且订阅属性有效。
    • 如果解决了您的问题,请务必将我的答案标记为正确答案。 :)
    猜你喜欢
    • 1970-01-01
    • 2016-01-18
    • 2012-12-11
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 2012-03-15
    • 2012-09-08
    • 2015-09-19
    相关资源
    最近更新 更多