【发布时间】:2014-09-19 14:51:46
【问题描述】:
我正在使用 Knockout 和 ko.mapping 插件来创建和更新我的视图模型。我有一个来自服务器的这样的 json 结构,例如:
var viewmodel = {
name: "Foo",
person: {
forename: "John",
surname: "Smith"
}
};
当我使用ko.mapping.fromJS(viewmodel) 创建我的视图模型时,只有叶节点被转换为可观察对象,所以我得到类似于以下内容:
var viewmodel = {
name: ko.observable("Foo"),
person: {
forename: ko.observable("John"),
surname: ko.observable("Smith")
}
};
但我需要每个属性都是可观察的(在此示例中,person 也必须是可观察的),因为我有一些自定义绑定可以处理复杂的可观察对象。
如何配置映射插件以将 每个 属性转换为 observable?
我知道我可以使用这样的东西:
var mapping = {
'person': {
create: function (options) {
var myPersonData = ko.mapping.fromJS(options.data);
return ko.observable(myPersonData);
}
}
};
ko.mapping.fromJS(viewmodel, mapping);
但我需要一个动态解决方案,因为我不知道属性名称(例如“人”)。服务器生成一个动态 json 对象并将其返回给客户端(带有绑定的 HTML 代码也使用正确的属性名称动态创建)。 上面显示的函数必须为 json 对象中的 every 属性执行 - 这可能吗?或者有其他解决方案吗?
【问题讨论】:
标签: knockout.js mapping observable hierarchical