Knockout.js 通过敲除映射插件更新嵌套模型
我为包含其他模型的模型定制了敲除映射Knockout.js 通过敲除映射插件更新嵌套模型,knockout.js,Knockout.js,我为包含其他模型的模型定制了敲除映射 var InnerModel = function(data) { var self = this; ko.mapping.fromJS(data, {}, self); var customVar = true; }; var Model = function() { var self = this; var customMapping = { 'InnerModel': {
var InnerModel = function(data) {
var self = this;
ko.mapping.fromJS(data, {}, self);
var customVar = true;
};
var Model = function() {
var self = this;
var customMapping = {
'InnerModel': {
update: function (options) {
return ko.observable(new InnerModel(options.data));
}
}
};
ko.mapping.fromJS(forecastData, customMapping, self);
}
当第一次创建模型时,这种方法可以很好地工作。然而,当模型更新时(当通过ajax再次加载数据时),这并不能正常工作
原因是我不需要在update
上创建新的InnerModel
。在newinnermodel
期间,我丢失了在InnerModel
中创建的一些自定义属性的值。例如,我有InnerModel.customVar
,默认设置为true
,但是,在以后的一些操作中,它的值为false
。但是如果我进行映射,它总是被设置回true
如何正确编写更新映射?
customVar
正在重置为true
,因为在Model
映射选项中,您正在调用new InnerModel(options.data)
,并且您的InnerModel
函数中将customVar
设置为true
。同样,如果您有var customVar=false在该函数中,每次更新模型customVar
时,都会将其重置为false
一个简单的解决方案是告诉Knockout映射插件忽略该属性。因此,您的功能可以更改为:
var InnerModel = function(data) {
var self = this,
mappingOpt = {
'ignore': ['customVar']
};
ko.mapping.fromJS(data, mappingOpt, self);
var customVar = true;
};
这样,每次实例化新的InnerModel
customVar
时,都会将其设置为true;任何后续的模型更新(通过AJAX或其他方式)都会忽略该属性的值,并保持其完整性
编辑
再看看这个问题,我意识到如果customVar
是一个纯粹的客户端属性(而不是AJAX更新中包含的属性),那么我上面的答案就无法解决您的问题。在这种情况下,问题不在于映射插件——这是因为当您更新模型时,您正在实例化一个新的InnerModel
,该customVar
设置为true
因此,您必须自己实现一些自定义逻辑,以保留现有的customVar
值。我确实理解您编写的所有内容,我知道这一点。然而,我仍然无法找到我的问题的答案。在更新过程中创建“新模型”不是没有方法,而是在“init”上创建,而是在“update”上更新吗。我无法更新它。