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

标签 javascript knockout.js knockout-2.0

我在 parse.com 中打开了这个帐户 g2840904@trbvm.com/12345678。 我 fork 了 https://github.com/tachang/knockout_tasklist,它将 knockout 同步到 parse.com,当我启动应用程序时,我确实看到了唯一的项目 sometitle1 但是如果我改变sometitle1parse.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/

相关文章:

javascript - 对离开第一个字段的对象数组进行排序

javascript - Object.keys 返回私有(private)属性

javascript - Chartjs 和动态数据数组

javascript - Select2 重新初始化不起作用

jquery - knockout : How to delete multiple table row using check on knockoutJS?

javascript - Knockoutjs div 绑定(bind)未按预期工作

javascript - 点击后 Knockout.js 输入焦点

javascript - 使用 KnockoutJS,如何指定要绑定(bind)的 ViewModel?

javascript - 将鼠标悬停在图像上时以受控方式滚动 div 内容

javascript - 使用 Knockout.js 提交后在页面上输出动态表单内容