在Knockout中扩展动态和映射数据

时间:2012-08-31 16:27:39

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

使用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方法。

1 个答案:

答案 0 :(得分:1)

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

看起来你的代码接近它所需的代码。

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