似乎淘汰赛没有正确映射数组中对象的属性。
从chrome控制台中查看此示例:
> var viewmodel = ko.mapping.fromJS({list:[]});
undefined
> viewmodel.list().unshift({ name : ko.observable("Foo") });
1
> viewmodel.list()[0].name();
"Foo"
> var js = ko.mapping.toJS(viewmodel);
undefined
> js.list[0].name;
undefined
因此正在创建javascript对象,但'name'属性未被映射。
非常欢迎任何想法!
答案 0 :(得分:11)
来自http://knockoutjs.com/documentation/plugins-mapping.html,关于toJS()
功能:
这将创建一个未映射的对象,该对象仅包含作为原始JS对象一部分的映射对象的属性。
由于“name”不是您映射的原始对象的一部分,因此不会取消映射。您需要告诉映射插件包含此特定属性:
var js = ko.mapping.toJS(viewmodel, { include: ['name'] });
答案 1 :(得分:3)
尽管Niko的回答是正确的 - 有一种方法可以解决这个问题。
我不得不说这是一个丑陋的黑客,但是它能完成这项任务并且很容易理解:
ko.mapping.toJS(ko.mapping.fromJSON(ko.toJSON(viewmodel)))
我将视图模型从observable映射到json到observable(所有属性都已映射)到object。