【问题标题】:knockout mapping viewmodels parent child淘汰映射视图模型父子
【发布时间】:2015-10-13 03:53:05
【问题描述】:

我对knockout.js 很陌生,实际上我是在两天前开始意识到我的UI 脚本失控时遇到的。

所以,我有几个视图模型,都使用映射功能填充。

我的模型通过我的 MVC 控制器提供的 JSON 填充 OK。

function ChangeViewModel(data) {
    var self = this;
    changeMapping = {
        'CORs': {
            create: function (options) {
                return new CORViewModel(options.data);
            }
        }
    }
    return ko.mapping.fromJS(data, changeMapping, self);
}

function CORViewModel(data) {
    var self = this;
    corMapping = {
        'copy': ['VendorID', 'VendorName', 'ContractID'],
        'include': ['CorNo', 'CorName', 'Items'],
        'Items': {
            create: function (options) {
                return new CORItemViewModel(options.data);
            }
        }
    }

    self.CorNoName = ko.pureComputed(function () {
        if (self.CorVersion() > 1) return self.CorNo() + ":" + self.CorVersion();
        return self.CorNo();
    });

    self.GrandTotal = ko.pureComputed(function () {
        var total = 0;
        $.each(self.Items(), function () { total += this.Total() })
        return total;
    });

    return ko.mapping.fromJS(data, corMapping, self);
}

function CORItemViewModel(data) {
    var self = this;
    corItemMapping = {
        'copy': ['ChangeItemId', 'VendorCorId', 'VendorName', 'VendorId'],
    }

    return ko.mapping.fromJS(data, corItemMapping, self);
}

这就是我的视图模型,这就是我在 $(document).ready 函数中加载虚拟机的方式

var vm = new ChangeViewModel(data);
ko.applyBindings(vm);

我将所有这些都显示在一个带有输入等的表格中,并且看起来都很棒。 但是,如果我更改 CORItemViewModel 中的 Total,则父 CORViewModel 中的 GrandTotal 不会更新。谁能告诉我我可能缺少什么?

【问题讨论】:

  • 添加一个完整的代码,方便查看发生了什么。
  • 您确定必须应用绑定 ChangeViewModel 吗?
  • 你的计算被添加到self,但是你的构造函数returns是mapping.fromJS的输出,不包括self。您甚至可以访问这些计算结果吗?
  • 感谢 Roy,抱歉,复制/粘贴/编辑错误,再次将 self 添加到构造函数中
  • Oiyl,ChangeViewModel 实际上还有其他绑定,它们工作正常,我只是删除它们以简化

标签: javascript jquery asp.net-mvc knockout.js


【解决方案1】:

我为超级酷的建议创建了一个小提琴,效果很好......

https://jsfiddle.net/afvh6d6t/14/

code..

所以我回到原来的,原来是一个 bindingHandler 的问题,我使用了 ko-money 破坏了更新,所以我使用了这个 bindingHandler..

http://djsharepoint.com/post/2015/01/28/useful-knockout-js-binding-handlers

对问题进行了排序。

感谢所有花时间发帖的人。

【讨论】:

    猜你喜欢
    • 2014-07-20
    • 2012-11-12
    • 2018-07-21
    • 1970-01-01
    • 2013-03-31
    • 1970-01-01
    • 2012-12-18
    • 2013-06-08
    • 1970-01-01
    相关资源
    最近更新 更多