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 に答える