这是比this问题更进一步的问题。如果options.data为null,你应该怎么做更新knockout.mapping的回调?
我有一个为空的子属性视图模型,就像之前提到的问题
var data = [{ id: 0, child: { prop1 : 'a', prop2 : 'b' } } //Child object has data
,{ id: 0, child: null } ]; // Child object is null
现在我想用映射插件的更新回调,而做到这一点,如下所示:
var mappingOptions = {
child: {
create: function(options) {
if (!options.data)
return null;
return ko.mapping.fromJS(options.data);
},
update: function(options) {
if (!options.data)
return null;
// some update logic...
return options.target; // this is also null in case options.data is null
}
}
}
现在,当options.data为空时,在控制台“Uncaught TypeError:object is not a function”中出现错误,指向此映射插件中的代码:
...
if (hasUpdateCallback()) {
mappedRootObject(updateCallback(mappedRootObject));
}
...
其中mappedRootObject未定义。
那么如果options.data为null,我应该从更新回调中返回什么?
谢谢您的回复!我的演示中没有标记,因此没有任何绑定。至于视图模型 - 它可能是任何对象,对。你的演示不包括更新 - 我已经改变它http://jsfiddle.net/wEfWR/4/,同样的错误出现。 –
用新的小提琴更新了答案 – beauXjames
我需要为每个子对象运行更新回调,这就是为什么我将它放在“子”映射下的原因。在更新后的主对象回调更新回调函数中,这使得处理“子”对象非常困难 - 我必须手动检查所有子对象,使用关键回调在现有视图模型中找到它们的对(正在更新) (没有在样例中指定,但在我的项目中使用) - 这就是为什么我使用ko.mapping,所以它会为我做这一切。 –