很多时候我在我的淘汰应用程序中使用以下代码:
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。如果你知道这篇文章的更好标题 - 请编辑它。
答案 0 :(得分:1)
来自文档:
这会自动为数据上的每个属性创建可观察的属性。然后,每次从服务器接收新数据时,可以通过再次调用ko.mapping.fromJS函数一步更新viewModel上的所有属性
所以你的方法会变成:
this.someMethod = function(ID){
$.post('/url', { ... }, function(o){
ko.mapping.fromJS(o, self);
}, 'json');
}