我正在处理与报告相关的项目,我需要使用KO构建大量报告。使用AJAX拉取所有数据并更新模型。目前我正在编写大量的js函数来映射模型。类似的东西:
function modelx(child) {
var self = this;
self.Name = ko.observable(child.Name);
self.Relation = ko.observable(child.Relation);
// hundred other properties
};
function modely(child) {
var self = this;
self.Age = ko.observable(child.Age);
self.Relation = ko.observable(child.Relation);
// hundred other properties
};
在AJAX调用之后,我正在填充可观察数组
for (var i = 0; i < jsn.length; i++)
{
VM.modelxlist().push(new modelx(jsn[i]));
}
for (var i = 0; i < jsn1.length; i++)
{
VM.modelylist().push(new modely(jsn1[i]));
}
有没有办法避免模式的定义,模式,...这样模型是自动构建的,而不会在HTML中使用时失去这种方法的好处?当然可能存在一个极端情况,我可能无法从服务器获取特定属性,我应该在服务器端检查。
此外,有时我可能需要添加额外的计算可观察量(只是为了更灵活)
答案 0 :(得分:0)
为什么不使用淘汰赛映射插件:
http://knockoutjs.com/documentation/plugins-mapping.html
然后你会有类似的东西:
var modelxInstance= ko.mapping.fromJS(child);
有一些用于淘汰赛的映射插件,我最喜欢的是这一个:
https://github.com/LucasLorentz/knockout.mapper
原因是它更易于配置,速度更快。
答案 1 :(得分:0)
我认为this就是你想要的......
使用ko.mapping.fromJS方法,你可以自动观察对象的所有属性。 花点时间阅读一下......