【问题标题】:Periodically Updating Backbone JS Model定期更新主干 JS 模型
【发布时间】:2011-10-04 15:45:59
【问题描述】:

我正在使用带有 xml api 数据馈送的骨干 js。我为每个接收 xml 并将其转换为 json 的页面都有一个顶级模型。然后,我在模型中有其他方法,它们通过控制器将 json 模型的特定部分返回到特定视图。这一切都按预期工作。

我想定期(通过 setTimeout)更新顶层模型并让它触发更改事件并更新视图。我的问题是我应该在哪里处理/初始化这个周期性事件的触发以更新模型,因为它不是真正的用户触发事件?

【问题讨论】:

    标签: backbone.js


    【解决方案1】:

    我会给我的模型一个startUpdate() 方法、一个endUpdate() 方法和一个内部的onTimerUpdate() 方法来进行获取。然后,您可以在模型上调用startUpdate() 并让它根据需要运行,当服务器端更新不方便运行时(例如,在客户操作数据的过程中)暂停它,并在客户端更改成功完成对服务器的写入后重新启动它。

    更好的是,您可以将它做成一个 mixin 并与许多不同的模型一起使用。

    【讨论】:

    • 所以我在我的模型中添加了 startUpdate、endUpdate 和 onTimerUpdate。我在页面控制器的 index 操作中调用 startUpdate 并将模型传递给各种视图,从而成功地将模型绑定到所有视图。我现在遇到的问题是我想通过控制器将模型的某些部分(例如 data: model.getDerivedSubModel() )作为通用属性传递给不同的视图以重用视图。
    • 但是当我尝试这样做时,模型会更新,但是当视图重新渲染时,该方法返回的派生数据保持不变(就像模型在视图被重新渲染)。主干中有没有办法通过控制器将模型的特定部分绑定到视图?我意识到将所有这些数据放在一个模型中并不是一个理想的情况,但我不确定如何拆分它,因为它源自一个 url 并在一个 xml blob 中返回。
    • 模型是东西的集合吗?或者它只是一个巨大的斑点?如果它是一个集合,您可以编写动态过滤器并让视图只显示集合的一部分。不过,在我看来,就像您应该检测(即大量 console.log()s)您的模型并查看更新时发生的变化,因为视图应该反映模型的当前状态。如果它改变了,那么视图也应该改变。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    • 2016-02-22
    • 1970-01-01
    相关资源
    最近更新 更多