我在 parse.com 中打开了这个帐户 g2840904@trbvm.com/12345678
。
我 fork 了 https://github.com/tachang/knockout_tasklist,它将 knockout
同步到 parse.com
,当我启动应用程序时,我确实看到了唯一的项目 sometitle1
但是如果我改变sometitle1
到 parse.com task class 中的 sometitle2
我没有看到它在 webapp 中自动反射(reflect)出来。当变量 title 被定义为 observabale
时,knockout
不应该这样做吗?
this.title = ko.observable(data.title);
我应该怎么做才能自动反射(reflect)模型的变化?这意味着在 parse.com 中将 sometitle1
更改为 sometitle2
将更新网页以自动反射(reflect)该更改并显示 sometitle2
而不是 sometitle1
?
最佳答案
看来你误解了 KO 应该做什么。作为客户端库,Knockout 负责将您的 UI 与底层数据模型同步,该数据模型由您通过 ko.observable
变量 提供,而不是数据库本身。应用程序分为 3 层是有原因的 - 您有处理 UI 的前端,所有业务逻辑所在的中间层和用作数据存储的后端。 Knockout 桥接中间层和前端,而您要求在前端和后端之间建立直接桥接。
话虽这么说,您可以自己提供这个桥梁,但当然,从头开始编写它有点痛苦。最简单的方法是使用 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);
关于javascript - 为什么 Knockout 不会因模型更改而自动更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30000057/