2

我最初有一个这样的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 方法添加到此。

4

2 回答 2

6

我在这里找到了答案:

向使用 Knockout JS 映射插件创建的视图模型添加属性

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

var mapping = {
    create: function(options) {
        var innerModel = ko.mapping.fromJS(options.data);
        innerModel.AdditionalProperty = 'Add Function Here';
        return innerModel;
    }
};
于 2013-03-23T23:42:46.030 回答
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));
于 2013-11-26T15:04:29.547 回答