1

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

4

1 回答 1

1

看看这个答案,尤其是JSFiddle 上的实时示例

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

我认为你只需要折叠mappingko.mapping.fromJS进入你的Person构造函数。

于 2012-09-04T21:17:32.800 回答