是否有更简洁的方法在RequireJS中包含依赖项

时间:2013-04-02 02:30:50

标签: requirejs requirejs-text

假设我有一个如下所示的模块:

define(['jquery', 'actions', 'util', 'text!../templates/dialog.html!strip', 'text!../templates/requestRow.html!strip', 'text!../templates/respondForm.html!strip'], function($, actions, util, tDialog, tRequestRow, tRespondForm) {

此模块包含用于写入客户端UI的大部分代码。它还使用text.js插件加载了我编写的其他几个模块以及3个HTML模板。我想知道是否有更简洁的方法来做到这一点?随着应用程序的增长,我可能有其他模板要加载,或模块,看起来我的定义语句可能会变得有点难看。我应该在main.js中将模板路径添加到require.config,如下所示:

require.config({
baseUrl: '/webrequests/resources/scripts/',
paths: {
    'modernizr': '../js/vendor/modernizr-2.6.2-respond-1.1.0.min',
    'bootstrap' : '../js/vendor/bootstrap.min',
    'dialog' : 'text!../templates/dialog.html!strip',
    'requestRow' : 'test!../templates/requestRow.html!strip',
    'respondForm' : 'text!../templates/respondForm.html!strip'
}});

是否有某种方法可以加载目录中的所有模板,并且只需要在define语句中包含1个依赖项?

提前致谢。

1 个答案:

答案 0 :(得分:4)

您可以制作一个模块,用于加载您经常使用的模板。因此,将要加载的模板分组到一个模块中,这样您只需加载此模板模块而不是单个模板:

// generalTemplates.js
define([
    'text!../templates/dialog.html!strip', 
    'text!../templates/requestRow.html!strip', 
    'text!../templates/respondForm.html!strip'
], function (tDialog, tRequestRow, tRespondForm) {
    return {
        dialog: tDialog,
        requestRow: tRequestRow,
        respondForm: tRespondForm
    };
});

因此,在您的模块中,您可以像其他模块一样简单地包含模板:

define([
    'jquery', 
    'actions', 
    'util', 
    'generalTemplates'
], function($, actions, util, templates) {
    var tDialog = templates.dialog,
        tRequestRow = templates.requestRow,
        tRespondForm = templates.respondForm;

    /* You can do stuff with the templates here */
});