2012-09-13 67 views
0

我想用模塊加載所有我的模板以用於項目,但我不確定我在做的方式(a)是否會讓代碼使用r.js進行優化和(b)是有意義的 - 基本上,我擔心優化程序不會獲取define()塊內的嵌套require。理想情況下,我希望在運行r.j之後擁有一個縮小的單個文件,這是所有的依賴項,包括可能的文本文件。用requirejs以優化的方式加載模板

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() 

}); 

的目標是有一處正在處理模板資源加載,然後將其提供給其他模塊。

這似乎是一個很好的做法,如果不是,什麼是更好的策略?

+0

相反,你有沒有考慮過分別加載你的模塊?說,模塊的邏輯和模板在一起。這將導致更易於管理和模塊化的代碼。 – janith

+0

這很好,當模板對應於單個模塊,但對於像UI小部件或通用構建塊(行,按鈕等)的東西它不是這樣1:1 – dmp

回答

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 

}); 
+0

感謝您的答覆 - 它看起來很有趣,這將允許模板被r.js優化器捆綁成一個縮小文件? – dmp

+1

是的,捆綁爲單個模塊,但在一個文件中。 –