更新淘汰模型中的多个元素

时间:2014-05-10 04:30:08

标签: javascript knockout.js

很多时候我在我的淘汰应用程序中使用以下代码:

function VM_someModel(){
    var self = this;

    this.type1 = {
        a1       : ko.observable(false),
        a2       : ko.observable(false),
        a3       : ko.observable(false),
        ...
        b1       : ko.observableArray([]),
        b2       : ko.observableArray([]),
    };


    this.someMethod = function(ID){
        $.post('/url', { ... }, function(o){
            self.type1.a1(o['a1']);
            ...
            self.type1.b1(o['b1']);
        }, 'json');
    }

如您所见,我正在将ajax响应中的所有值分配给我的模型。我可以确保ajax的结果具有相同的字段(a1 ... b1)但是可以有多个字段 可在type1中找到。

我的代码没有任何问题,它运行正常,但我认为我的帖子请求中的所有代码都可以简化。我调查Loading and Saving data in knockout,但找不到合适的东西。我的另一个选择是遍历type1并从o中提取相同的值,但是那里有什么特定的淘汰赛吗?

P.S。如果你知道这篇文章的更好标题 - 请编辑它。

1 个答案:

答案 0 :(得分:1)

使用mapping plugin

来自文档:

  

这会自动为数据上的每个属性创建可观察的属性。然后,每次从服务器接收新数据时,可以通过再次调用ko.mapping.fromJS函数一步更新viewModel上的所有属性

所以你的方法会变成:

this.someMethod = function(ID){
    $.post('/url', { ... }, function(o){
        ko.mapping.fromJS(o, self);
    }, 'json');
}