【问题标题】:Pre loading backbone collections预加载主干集合
【发布时间】:2012-11-09 15:09:16
【问题描述】:

所以我想做的是让 Backbone 在路由器启动时获取我所有的集合,然后保留所有集合,而不必在移动到路由器中的不同路由时重新获取和重新加载所有集合。有谁知道这样做的方法吗?

【问题讨论】:

    标签: backbone.js backbone.js-collections


    【解决方案1】:

    来自Backbone.js docs:

    请注意,不应使用 fetch 来填充页面上的集合 加载——加载时需要的所有模型都应该是bootstrapped 到位。 fetch 用于延迟加载模型 不需要立即使用的接口:例如,文档 带有可以打开和关闭的笔记集合。

    这就是我在评论中的意思:

    <script>
      define("data", function() {
        return <?php echo json here ?>;
      });
    </script>
    

    然后您可以拥有var data = require("data"); 并使用它来初始化 Backbone 模型/集合。我不确定这是不是正确的做法。

    【讨论】:

    • 如何以 AMD 方式(使用 require.js)和 php 而不是 rails 来完成?
    • 我认为用 php 在内联脚本中输出 json 对象不会有问题(我在 python 中这样做)。如果您不想拥有一个包含数据的全局变量,那么您可以将内联脚本包装在 requirejs 定义函数调用中。只需确保将在加载 dom 后执行将使用数据的代码即可。
    • 谢谢!这就是我最终所做的,它帮助很大
    【解决方案2】:

    嗯,骨干默认情况下会这样做。只需将代码添加到您的路由器以创建每个集合的实例并在每个集合上调用一次fetch()。然后确保您的应用程序的其余部分只使用这些相同的集合实例,并且不再对它们调用fetch()。就是这么简单。

    但是,我认为您希望应用程序的其他部分能够调用 fetch() 并在需要时静默使用缓存数据。这被认为是一个很难正确解决的问题,但一个天真的简单实现是简单地将 isCached 标志存储为您的集合的属性,并在您覆盖的 fetch() 方法中检查它,如果您的集合数据已加载。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多