requirejs - 如何在服务器生成的值初始化时构建应用程序

时间:2013-11-12 14:25:19

标签: javascript requirejs amd commonjs

如果某些模块需要在页面中动态生成初始化数据,我对如何构建基于RequireJS的项目的最佳方法感兴趣。

为了澄清,我的问题是,我需要在主要的html页面中有这样的地方:

/* Following lines generated on server side so need to be in the html page*/
var initDataForModule1= [ data, generated, by, server];
var initDataForModule1= [ some, other, data, generated, by, server];

然后,我会有一些代码要求数据完全设置UI(不需要加载)。例如,他们需要包含以下内容:

for(var i=0;i<initDataForModule1.length;i++)
     generateUIElementWithData(initDataForModule1[i]);

那么,我应该将UI设置代码放在模块中,然后以某种方式加载它并给它初始化日期吗?或者哪个是好的方法?我想的是:

<script src="/js/lib/require.js"></script>
<script>
    var initDataForModule1= [ data, generated, by, server];
    var initDataForModule1= [ some, other, data, generated, by, server];

    require(['module1'], function(module1){
       module1.initWithData(initDataForModule1);
    });

    ...
<script>

另外,哪个是放置requirejs.config()部分的好地方?

1 个答案:

答案 0 :(得分:1)

从服务器端渲染JavaScript会遇到麻烦:混合语言几乎不可能重构,因为你最终会在JS文件中使用模板标记(在验证/ linting期间也会标记)。它还会将前端和后端代码耦合在一起,使项目的可移植性降低。


我决定使用进行AJAX调用的"text" plugin并在运行时读取配置(您需要记住在您的r中将inlineText设置为false。 js buildconfig文件),例如:

require(['main', 'someDep', 'text!../ajax/config'],
        function(App, someDep, configString) {
    App.start(dep, JSON.parse(configString);
});

其中"../ajax/config"是以JSON格式(*)提供配置的URL的路径。

(*)还有JSON plugin但是我无法让它工作并且“手动”解析JSON文本对我来说并不是一件容易的事。