Knockout.js 敲除映射+;计算子元素+&引用;映射重新加载“;失败
我希望使用敲除映射来生成ViewModelKnockout.js 敲除映射+;计算子元素+&引用;映射重新加载“;失败,knockout.js,knockout-mapping-plugin,Knockout.js,Knockout Mapping Plugin,我希望使用敲除映射来生成ViewModel var viewModel = ko.mapping.fromJS(data); 创建ViewModel后,我想添加计算文本元素 for (var i = 0; i < viewModel.Packages().length; i++) { var pack = viewModel.Packages()[i]; pack.packageClass = ko.computed(function() { return
var viewModel = ko.mapping.fromJS(data);
创建ViewModel后,我想添加计算文本元素
for (var i = 0; i < viewModel.Packages().length; i++) {
var pack = viewModel.Packages()[i];
pack.packageClass = ko.computed(function() {
return this.Height() * this.Depth() * this.Width()
}, pack);
}
页面在此状态下工作正常
但现在用户希望“保存”和“重新加载”页面。
这将通过使用映射功能完成,映射功能使用新数据更新ViewModel
data = ko.mapping.toJSON(viewModel);
但在重新绑定页面之前,不可能再次添加这些计算字段。我将得到一个错误,即找不到计算元素(不再)
我做错什么了吗?
无需计算字段或重新加载ViewModel,一切都可以正常工作
更新:小提琴已更新,可以像在解决方案中一样工作。
创建一个显式的ViewModel
PackageViewModel = function(data) {
ko.mapping.fromJS(data, {}, this);
this.packageClass = ko.computed(function() {
return this.Height() * this.Depth() * this.Width()
}, this);
};
然后像这样使用mappign选项
var mapping = {
Packages: {
create: function(options) {
return new PackageViewModel(options.data);
}
}
};
ko.applyBindings(ko.mapping.fromJS(data, mapping));
我更新了fiddle以使用最新的淘汰版V2.2.0。然后一切都开始了。
PackageViewModel = function(data) {
ko.mapping.fromJS(data, {}, this);
this.packageClass = ko.computed(function() {
return this.Height() * this.Depth() * this.Width()
}, this);
};
var mapping = {
Packages: {
create: function(options) {
return new PackageViewModel(options.data);
}
}
};
ko.applyBindings(ko.mapping.fromJS(data, mapping));