为什么 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);
在 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
:
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);