使用RequireJS(text.js插件)和Underscore进行模板化

时间:2014-03-18 18:23:33

标签: javascript templates backbone.js underscore.js-templating

需要一些关于在Underscore中管理模板的最佳方法的意见。我正在构建Backbone应用程序并使用Underscore来管理模板。我开始在' template.js'中做这样的事情。文件。

templates = {
    template1: '<h1>Some HTML</h1>',
    template2: '<h1>Some more HTML and a <%= variable %></h1>
    ...
}

这变得混乱。快速。所以,我查看了RequireJS的text plugin,这使得它更清洁。现在,我有一堆HTML文件,我基本上将它存储到我的&#39;模板&#39;宾语。像这样:

define(['text!/templates/template1.html',
    'text!/templates/template2.html',
    ...], 
    function(template1, template2, ...) {
        return {
            template1: template1,
            template2: template2,
            ....
        }
});

所以现在问题是HTTP请求。仅对于模板,我有5个请求 - 1个用于template.js文件,然后是4个单独的HTML模板文件。这个名单将继续增长。我想的一件事是将所有HTML放在一个文件中,但这似乎与AMD方法无关。随着应用程序的进展,我可以更聪明地做到这一点,并且只在必要时加载HTML模板 - 如果它们全部分开。

是否有解决所有HTML请求的方法?我认为这不是生产环境中的好习惯。

对于如何完成我想要做的事情,任何人都有任何其他想法吗?

1 个答案:

答案 0 :(得分:4)

这是RequireJS Optimizer的用途。它将您的所有模块组合到一个文件中,作为预部署构建过程的一部分。根据{{​​3}}:

  

文本文件是通过异步XMLHttpRequest(XHR)调用加载的,因此您只能从与网页相同的域中获取文件(请参阅下面的XHR限制)。

     

但是,RequireJS优化器会内联任何文本!引用实际的文本文件内容到模块中,所以在构建之后,有文本的模块!可以从其他域使用依赖项。