1

So what I'm wanting to do is have Backbone fetch all my collections when the router starts, and then keep all the collections and not have to re-fetch and reload all the collections while moving to different routes in the router. Does anyone know a way to do this?

4

2 回答 2

1

来自Backbone.js 文档:

请注意,不应在页面加载时使用 fetch 来填充集合——加载时所需的所有模型都应该已经引导 到位。fetch 旨在为不需要立即需要的接口延迟加载模型:例如,具有可以切换打开和关闭的注释集合的文档。

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

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

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

于 2012-11-09T16:27:21.697 回答
1

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

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

于 2012-11-09T15:42:53.990 回答