用于淘汰赛的动态可观察类

时间:2015-04-16 01:50:06

标签: javascript ajax knockout.js

我正在处理与报告相关的项目,我需要使用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中使用时失去这种方法的好处?当然可能存在一个极端情况,我可能无法从服务器获取特定属性,我应该在服务器端检查。

此外,有时我可能需要添加额外的计算可观察量(只是为了更灵活)

2 个答案:

答案 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方法,你可以自动观察对象的所有属性。 花点时间阅读一下......