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