2012-11-09 56 views
1

所以我想要做的是让骨干在路由器启动时抓取我的所有集合,然后保留所有集合,而不必在移动到不同路由时重新获取并重新加载所有集合在路由器中。有没有人知道一种方法来做到这一点?预加载骨干集合

回答

1

Backbone.js docs:

注意获取不应该被用来填充上 页面加载的集合 - 在加载时应该已经bootstrapped 到地方所需要的所有车型。取指适用于不需要立即需要的 接口的延迟加载模型:例如,文档 带有可能被打开和关闭的注释集合。

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

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

然后你就可以有var data = require("data");,并用它来初始化骨干型号/系列。我不确定这是否是正确的做法。

+0

这怎么可能以AMD时尚(使用require.js)和php代替rails? –

+0

我不认为这将是一个问题,用PHP输入内联脚本中的JSON对象(我在Python中执行它)。如果你不想让数据具有全局变量,那么你可以将你的内联脚本包装在requirejs define函数调用中。只要确保在加载dom之后将使用数据的代码即可执行。 –

+0

谢谢!这就是我最终做的,它帮助了很多 –

1

那么,主干默认会这样做。只需将代码添加到路由器中即可创建每个集合的实例,并在每个集合上调用fetch()一次。然后确保你的应用程序的其余部分只使用这些相同的集合实例,并且不会再次调用fetch()。这真的很简单。

但是,我认为您希望您的应用程序的其他位可以调用fetch(),并根据需要静默使用缓存的数据。这被认为是一个难以正确执行的难题,但是一个简单而实用的方法是简单地将isCached标志存储为您的集合的一个属性,并检查在您重写的fetch()方法中,如果您的集合数据已经存在,加载。