为什么 Knockout 不会因模型更改而自动更新?

why knockout does not auto update by model changes?

parse.com 我开了这个账户 g2840904@trbvm.com/12345678。 我分叉 https://github.com/tachang/knockout_tasklist which synchronizes knockout to parse.com and when i start up the app i do see as the only item sometitle1 however if I change sometitle1 to sometitle2 in parse.com task class i don't see this being relfected automatically in the webapp. isn't that what knockout supposed to do when the variable title 定义为 observabale?

this.title = ko.observable(data.title);

我应该怎么做才能自动反映模型的变化?这意味着在 parse.com 中将 sometitle1 更改为 sometitle2 将更新网页以自动反映该更改并显示 sometitle2 而不是 sometitle1?

看来你误解了KO应该做什么。作为客户端库,Knockout 负责将您的 UI 与底层数据模型同步,该模型由您 通过 ko.observable 变量 提供,而不是数据库本身。应用程序分为 3 层是有原因的 - 您有处理 UI 的前端,所有业务逻辑所在的中间层和用作数据存储的后端。淘汰桥中间层和前端,而您要求在前端和后端之间直接桥接。

话虽这么说,您可以自己提供此桥接,但当然从头开始编写它有些痛苦。最简单的方法是使用 setInterval:

每隔 X 秒询问数据库是否有任何新数据到达
var updateTasks = function () {
    $.parse.get("task", {}, function(json) {
        self.tasks.removeAll();
        for( var i = 0; i < json.results.length ; i++ ) {
             var task = json.results[i];
             self.tasks.push(new Task({ title: task.title, objectId: task.objectId }));
         }
     })
 }
 setInterval(updateTasks, 5000);