2

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

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

是否可以预加载视图并将它们加载到 Durandal 中?如果是这样,我该怎么做?

请注意,我是 Durandal 的新手。

4

3 回答 3

0

问题在于 text.js - 一个 RequireJS 插件。所以我修改了它以供我使用来执行预加载模板逻辑。

我已经创建了一个例子。 我的编码器墙博客 示例代码

于 2014-07-08T15:18:01.467 回答
0

Durandal 不会多次下载同一个模板,因为它使用 requirejs 和文本插件来进行实际加载。这使得性能受到的影响不再那么重要,尤其是在这些文件来自缓存的以后访问时。此外,可以使用requirejs 优化器将您的模板打包到一个文件中,尽管我自己从未尝试过这样做。

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

然而,加载外部视图是 Durnadal 组合的预期使用方式(尽管看起来 Durnadal可能会扩展以支持您的用例)。如果您要预加载模板,则值得考虑不使用 compose 绑定,而直接使用knockout 的模板绑定。您将失去 Durandal 为您启用的一些生命周期管理,但如果您正在考虑完全放弃 Durandal,我认为这不是什么大问题。无论哪种方式,重新创建它都不是太困难。

于 2013-05-28T21:14:30.170 回答
0

为什么不能使用隐藏和显示 CSS 属性而不是使用视图?因为你所有的“视图”都是从同一个数据模型中填充的。Durandal 将在停用时从 DOM 中取消附加视图,并在再次激活视图时重新附加它。这意味着视图必须由 Web 浏览器重新呈现,并且 Knockout 将必须重新应用 DOM 元素上的所有绑定。

于 2013-05-08T18:52:06.317 回答