使用requirejs以可优化的方式加载模板

时间:2012-09-13 12:11:24

标签: javascript templates requirejs

我想为带有模块的项目加载我的所有模板,但我不确定我这样做的方式(a)是否会让代码进行优化r.js和(b)是有道理的 - 基本上,我担心一个define()块内的嵌套需求不会被优化器拾取。理想情况下,在运行r.js之后,我希望有一个缩小的单个文件,它是所有依赖项,如果可能的话,包括文本文件。

template_loader.js

define(["jquery","underscore","icanhaz"],function($,_,ich){


    var template_names = [  
        'test'
    ];

    require([
        'text!templates/test.tpl',
    ],function (){
        for (var i = arguments.length - 1; i >= 0; i--) {
            ich.addTemplate(template_names[i],arguments[i]);
        };      
    });


});

然后在我的主app.js中:

require(['jquery','underscore','backbone','icanhaz','template_loader'],function($,_,Backbone,ich,loader){

    // templates should be available here as ich.template_name()

});

目标是有一个处理模板资源加载的地方,然后可供其他模块使用。

这看起来是一种很好的方法,如果没有,那么什么是更好的策略?

1 个答案:

答案 0 :(得分:2)

如果您想一次性加载所有模块,可以尝试以下方法:

<强> generic_templates.js

define(function(require){
    var tpl1 = require('text!generic_tpl1');
    var tpl2 = require('text!generic_tpl2');
    // etc

    return {
        tpl1: tpl1,
        tpl2: tpl2
    }
}); 

<强> app.js

require(['generic_templates'], function(genericTemplates) {

    console.log(genericTemplates.tpl1) // some html

});