Knockout JS:如何更新整个可观察数组

时间:2012-06-07 07:58:47

标签: knockout.js

我需要一些Knockout JS的帮助。

我有一个todo-list类型的web-app,我需要按需更新整个observable数组,其中包含从数据库中获取数据的任务列表。

我在这里创建了一个示例小提琴:http://jsfiddle.net/ingro/43XcU/26/

self.update = function(){

    var values = [
        {time: "17:00", title: "test#11"},
        {time: "18:00", title: "work#22"},     
        {time: "19:00", title: "task#33"},    
        {time: "20:00", title: "sleep#14"}
    ];

    self.clone = ko.observableArray(ko.utils.arrayMap( values , function( clone) {
        return new Post(clone.time, clone.title);
    }));

    var count = 0;

    ko.utils.arrayForEach(self.posts(), function(post) {
        post.time(self.clone()[count].time());
        post.title(self.clone()[count].title());
        count++;
    });           

}

“值”中的数据模拟来自服务器的JSON响应。我使它工作的唯一方法是创建一个克隆可观察数组,然后在真实数组中循环,并使用新值逐个更新其所有元素。由于许多原因,这不是最佳解决方案,例如,如果两个数组中的元素数量不相等,等等。

所以任何人都可以建议我更新它的更新方法吗?

谢谢,对不起我糟糕的英语:D

1 个答案:

答案 0 :(得分:2)

我不确定你需要什么,但我是通过使用淘汰映射插件来实现的: http://knockoutjs.com/documentation/plugins-mapping.html

你可以在这里试试小提琴:http://jsfiddle.net/Chubyone/a682w/6/

问候。