【问题标题】:Extending dynamic and mapped data in Knockout在 Knockout 中扩展动态和映射数据
【发布时间】:2012-08-26 12:02:02
【问题描述】:

使用 Knockout.JS,我试图确定如何最好地扩展视图模型中的对象,当它们将通过映射插件加载并动态添加时。在此示例中,我将方法 addChild 添加到 Person 对象。

在映射期间扩展:

    var myPersonModel = function (data) {
        ko.mapping.fromJS(data, {}, this);

        this.addChild = function () {
            this.children.push(new Child());
        } .bind(this);
    }

    var mapping = {
        'people': {
            create: function (options) {
                return new myPersonModel(options.data);
            },
        }
    }

    var viewModel = ko.mapping.fromJS(data, mapping);

动态创建时扩展:

    function Person(id, name, children) {
        this.id = ko.observable(id);
        this.name = ko.observable(name);
        this.children = ko.observable(children);
        this.addChild = function () {
            this.Forms.push(new Child());
        } .bind(this);
    }

但在我看来,必须有一种更简单的方法来做到这一点,这样我就不需要重复自己了,并且映射对象和新对象都可以使用 addChild 方法。

【问题讨论】:

  • @JimG。我打错字了,打算参考 addChild 方法(已更正)。而且我不确定如何实施您的建议。你能帮忙吗?

标签: javascript inheritance knockout.js knockout-mapping-plugin


【解决方案1】:

看看this answer,尤其是live example on JSFiddle

看起来你的代码已经接近它需要的了。

我认为您只需将mappingko.mapping.fromJS 折叠到您的Person 构造函数中。

【讨论】:

  • 这是一个工作版本:jsfiddle.net/vDjwp 虽然解决方案有点复杂,但您确实引导我朝着正确的方向前进。
  • @Joe:太好了!很高兴我能帮上忙!
猜你喜欢
  • 1970-01-01
  • 2014-04-29
  • 1970-01-01
  • 1970-01-01
  • 2021-08-03
  • 1970-01-01
  • 2012-11-05
  • 1970-01-01
  • 2018-08-23
相关资源
最近更新 更多