使用requireJS动态加载js文件

时间:2014-05-08 02:36:52

标签: javascript jquery requirejs

我正在创建一个RPG。我想根据当前级别动态加载NPC对话框js文件。

最初,我在我的game.js文件的顶部做了<script type="text/javascript" src="js/npc_dialog_level_1.js"></script> ...但是不想为每个npc_dialog.js文件继续这样做。

我宁愿做类似的事情:

if (map == 1) {
   require(js/npc_dialog_level_1.js);
if (map == 2) {
   require(js/npc_dialog_level_2.js);

我正在关注requireJS的教程,但我不清楚:

a)下载requireJS不包含示例中指定的helper / utils.js文件夹和文件:

 project-directory/
    project.html
    scripts/
        main.js
        require.js
        helper/
          util.js

b)如何使用require函数:require(["helper/util"], function(util) {    在地图更改时,我只想将路径放置到关联的npc_dialog_level.js文件中。我在哪里放置Require代码,以及如何传入它以加载正确的js文件?


每个npc_dialog_level文件都包含js对象。我在游戏中使用它来阅读对话框

var dialog = {

quests : {
    Lee : {
        "1 - Introductions" :

更新

我试过了:

//load NPC dialog given the map
loadNpcDialog : function (dialogNumber) {
    require("npc_dialog_level_" + dialogNumber + ".js", function(dialog) {
    //  log(dialog);
    });     
},

给出:

Uncaught Error: Invalid require call
http://requirejs.org/docs/errors.html#requireargs require.js:166

2 个答案:

答案 0 :(得分:4)

调用require时,必须使用括号作为依赖关系列表,如下所示:

//load NPC dialog given the map
loadNpcDialog : function (dialogNumber) {
    require(["npc_dialog_level_" + dialogNumber + ".js"], function(dialog) {
    //  log(dialog);
    });     
},

如果您不使用括号,那么您将使用require的伪同步形式,其使用方式如下:var dialog = require("npc_dialog_level_" + dialogNumber + ".js")。但是,这种伪同步形式在您的情况下不起作用。

如果您最终要将这些文件转换为JSON文件或XML,则可以使用text! plugin加载它们。

答案 1 :(得分:2)

IFF您的对话框内容实际上都是JavaScript,然后进行后期加载相当容易。

function runNpcDialog(number) {
    require(["npc-dialog-" + number + ".js"], function(dialog) {
      // Run your dialog here.
    });
}

否则,如果您的信息更多是JSON / XML格式,那么使用ajax将是更好的选择。

编辑:修正语法