jquery - Backbone.js、下划线.js : template images preloading

标签 jquery backbone.js underscore.js image-preloader

我目前正在使用 JQuery、RequireJS 和 Underscore 完成一个巨大的 Backbone.js 应用程序。

我的下划线模板中有很多图像(很多.png),并且append() || 有点长在我当前的 View 中 prepend() 这些模板。

那么有什么好方法可以做我所做的事情吗?我正在寻找一个库或示例来在我的模板上进行预加载。

最佳答案

我认为您不一定需要一个库来实现此目的,除非有一个专门用于模板的库。如 these related questions 中详述,预加载图片比较简单:

$("<img />").attr("src", url);

将在 url 处预加载图像。很明显,您可以轻松地将其应用于数组(此处使用 $.each 以获得简洁的语法):

function preload(urls) {
    $.each(urls, function(i, url) {
        $("<img />").attr("src", url);
    });
}
preload(['/images/1.png', '/images/2.png', ... ]);

您不需要为此使用库。就您而言,最困难的部分是生成要预加载的 URL 列表。如果不更好地了解您的模板系统,就不可能知道这里的最佳方法,但这里有一些方法:

  • 如果您的模板在内存中可以作为 DOM 对象使用,那么您可以使用类似 $('img').map(function() { return $(this).attr('href') }) 的方式循环访问它们。来查找 URL。但如果您在 <script> 中使用下划线模板标签,并且在渲染 View 之前不会将它们放入 DOM 对象,那么这不太可能起作用 - 只是为了提取 URL 的目的而使用虚拟数据渲染它们会很痛苦,而且会占用处理器资源。

  • 如果您使用像 Ant 这样的构建系统,并且您的模板与其他代码相当独立(例如,每个模板位于单独的文件中),那么您可以考虑使用正则表达式来解析 URL 模板,然后将它们粘贴到 Javascript 文件中的数组中,您可以将其用作预加载器的输入。这是一个相当复杂的构建任务,但从性能的角度来看,它可能是最好的选择,因为所有模板解析都发生在构建时,而不是运行时。

  • 另一种构建系统方法(可能更简单)是将要预加载的所有图像放入给定目录中,然后将该目录下的每个文件放入 Javascript 数组中。这可能是使用 Ant 最简单的方法,尽管它可能需要您修改图像的目录结构。

  • 您始终可以手动创建 URL 数组,但使用一组复杂的模板使其保持最新会很痛苦。

  • 如果您有一个复杂的应用程序,并且您只想在任何给定时间预加载某些图像,您可能需要手动识别这些图像,然后调用 preload(upcomingImages)在适当的时间获取适当的图像集。

关于jquery - Backbone.js、下划线.js : template images preloading,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8947371/

相关文章:

javascript - JQuery UI 对话框 : TypeError: a(. ..).parents(...).andSelf 不是函数

javascript - 如何检查卸载前确认框是否被点击

.net - Backbone.js 模型同步和 C# .net RESTful Web 服务

javascript - Underscore.js 生成的模板的事件处理程序

javascript - 某个单词出现在字符串末尾

javascript - 遍历 HTML 表返回 Uncaught TypeError : '0' property for undefined

jQuery Modal + .show() 和 .hide()

javascript - 如何在 Backbone js中全局访问路由器?

backbone.js - model.bind 和 model.on : Are these methods equivalent? 我应该选择哪一个?

每个函数中的 Javascript 新对象没有像我想象的那样工作