【发布时间】:2016-02-10 09:17:29
【问题描述】:
我有一个视图模型,它有一些现有的属性。
model.prop1 = ko.observable("");
model.prop2 = ko.observable("");
然后我将一些数据映射到这个模型上,这将更新 prop1 的值。
var data = {prop1: 'blah'};
ko.mapping.fromJS(data, {}, model);
我现在打电话给ko.toJS 和ko.mapping.toJS 时有些不一致
使用ko.toJS,它按预期将模型序列化:
[object Object] {
model: [object Object] {
__ko_mapping__: [object Object] { ... },
prop1: "blah",
prop2: ""
}
}
我使用了映射插件,所以它有一些我不想要的多余数据(ko_mapping)。
因此,我使用ko.mapping.toJS,但这并没有序列化所有属性...仅序列化已映射的属性。
我的理解是这会像ko.toJS 那样序列化所有内容?
[object Object] {
model: [object Object] {
prop1: "blah"
}
}
这是预期的行为还是我发现了错误?
【问题讨论】:
-
简短回答,如果你打算使用映射插件来映射你的模型,你需要使用映射插件来取消映射。插件需要能够工作的大量元数据,其中很多是使用不打算使用的对象上的特殊属性存储的。 Vanilla 淘汰赛没有意识到这一点,因此它只会将元数据视为普通数据。
-
我只想将映射插件用于我的模型的一部分。在我的真实示例中,我有一个
isEditing可观察标志。我不想通过我的数据发送这个,因为它没有存储或我的域的一部分。也就是说,当我在整个事情上调用 .toJS 时,我需要知道它的价值。 -
@4imble 你应该用你对他的回答的删除评论来回答你的问题,因为你刚才描述的绝对是你(和我的)问题的答案。下面的答案没有解决您所描述的内容,您需要添加函数来返回您想要在映射后序列化的内容。谢谢你的注意!
标签: knockout.js knockout-mapping-plugin