Knockout Mapping Plugin - 如何将属性添加到默认映射?

时间:2013-03-23 23:28:02

标签: knockout.js

我最初有一个像这样的viewModel:

var ObjectViewModel = function (data) {
    var self = this;
    //debugger;
    self.id = data.id;
    self.details = data.details;
    self.children = ko.observableArray(data.children);

    self.deleteChild = function (child) {
        // Pending UI
        // call API here
        // On success, complete
        self.children.remove(child);
    }.bind(self);

};

现在我正在尝试使用映射插件,因此我可以使子数组元素可观察。我做到了这一点:

var ObjectViewModel = ko.mapping.fromJS(data);

但我不确定如何将deleteChild方法添加到此。

2 个答案:

答案 0 :(得分:6)

我在这里找到了答案:

Adding properties to the view model created by using the Knockout JS mapping plugin

基本上,对于我需要添加的每个附加属性,我在innerModel上定义了一个新属性,如下所示:

var mapping = {
    create: function(options) {
        var innerModel = ko.mapping.fromJS(options.data);
        innerModel.AdditionalProperty = 'Add Function Here';
        return innerModel;
    }
};

答案 1 :(得分:2)

我以不同的方式完成了这项工作,似乎也有效。

function ObjectViewModel(viewModel) {
    var self = this;

    // bind the vm to self
    ko.utils.extend(self, viewModel);

    self.deleteChild = function (child) {
        // Pending UI
        // call API here
        // On success, complete
        self.children.remove(child);
    }.bind(self);
};

var model = new ObjectViewModel(ko.mapping.fromJS(data));