预加载并保持Durandal视图

时间:2013-05-07 16:40:28

标签: javascript single-page-application durandal

我正在写一个有几个不同观点的SPA。所有视图都将显示搜索结果,因此如果可以在接收搜索结果时填充所有视图,则会更容易。如果我不必在输入时渲染每个视图,它也会加速一些事情。例如,其中一个视图包含一个可以从一些预加载中受益的地图(并且不会从重新渲染中获益)。

我正在考虑使用Durandal并调查是否可以预加载Durandal视图并在切换视图时加载它们以便我可以随时访问任何视图中的DOM元素。

是否可以预加载视图并将其保存在Durandal中?如果是这样,我该怎么做?

请注意,我是Durandal的新手。

3 个答案:

答案 0 :(得分:0)

为什么你不能使用hide和show css属性而不是使用视图?由于所有“视图”都来自同一数据模型。 Durandal将在取消激活时从DOM取消附加视图,并在再次激活视图时重新附加它。这意味着必须由Web浏览器重新呈现视图,并且敲除必须重新应用DOM元素上的所有绑定。

答案 1 :(得分:0)

Durandal不会多次下载相同的模板,因为它使用requirejs和text插件来进行实际加载。这使得性能不再受到关注,尤其是在这些文件来自缓存时的后续访问中。此外,可以使用requirejs optimizer将模板打包成一个文件,但我自己从未尝试过这样做。

Durandal确实有一个名为cacheViews的组合模块选项,可在其他设置下找到,这可能值得研究。它不会预加载模板,但它确实允许您避免重新附加它们。这是一种优化,在一般情况下不起作用(这就是选择加入的原因),但它可能适用于您的场景。

但是,加载外部视图是打算使用Durnadal的合成方式(虽然它看起来像Durandal might be extended to support your use case)。如果您要预加载模板,那么值得考虑不使用compose绑定并直接使用knockout's template binding。你将失去Durandal为你带来的一些life cycle management,但如果你考虑完全放弃Durandal,我认为这不会是一个大问题。无论哪种方式,重建它都不是太困难。

答案 2 :(得分:0)

问题在于text.js - 一个RequireJS插件。 所以我根据我的用法修改了它来做预加载模板逻辑。

我已经创建了一个例子。 my coder wall blog Example code