2014-09-26 88 views
0

我正在学习require.js来组织backbone.js模板。当我在互联网上搜索时,我有几个教程。我在那里发现不同的实现。这就是为什么我无法理解main.js文件的代码。理解require.js以实现backbone.js

//file name main.js 

    require.config({ 
    paths: { 
    jquery: 'libs/jquery/jquery', 
    underscore: 'libs/underscore/underscore', 
    backbone: 'libs/backbone/backbone' 
    } 
}); 

require([ 
    'app', 
], function(App) 
{ 
    App.initialize(); 
}); 

特别是我无法理解第二部分。也就是说

要求([ '应用', ],功能(应用程序) { App.initialize(); });

这是什么意思App.initialize();

+0

许多加载require的应用程序需要在加载后触发init()方法或其他类型的应用程序。如果你不需要它,就把它放下。 – wwwmarty 2014-09-26 13:12:47

+0

感谢@MartyMcKeever的回复。这是什么意思** App.initialize(); ** ??是否有任何名为** initialize()**的函数? – 2014-09-26 13:14:43

+0

不是骨干人物,但是这个例子假定无论你需要什么(在函数中本地命名的App)都有一个initialize()方法,需要在启动时立即调用它。您所需的应用程序可能有也可能没有这样的启动方法,并且可以命名任何东西。通常它被称为init(); – wwwmarty 2014-09-26 15:49:07

回答

2
require([ 'app', ], // this means you have a file called app.js, 
        // which is a require module 
], function(App) // This means after loadind, App will be an alias 
       // for the module.exports object 
{ 
    App.initialize(); // This means the module exposes an initialize function 
        // (some will call it method), that is invoked 
}); 
+0

谢谢@laruiss。 ** initialize()**是一个主干函数(http:// backbonejs。org /#Model-constructor),我对吗? – 2014-09-26 14:13:40

0

该结构是异步模块定义或AMD的格式。它基本上是一个用于以异步方式在应用程序中加载模块(本质上是Javascript文件)的API。

过去,这通常是使用页面底部的<script>标签完成的。问题是那些被同步加载(一个接一个)并且处理文件之间的依赖关系可能是繁重的。 AMD是能够异步加载Javascript文件的一个建议标准。

一些基本的内容本(使用您的代码作为示例):

您调用函数require,它接受两个参数:

  1. 字符串数组表示路径的文件(或别名到路径)。这些将是文件需要的依赖关系(考虑用Java导入)

  2. 加载在第一个参数中指定的依赖关系之后由Require调用的回调函数。需求将传入您在第一个参数中指定的实际文件。因此,在你的榜样,你是在告诉需要“走出去,并加载app.js文件”,当其加载,该文件传进我的回调函数

所以在这个代码(这是你的回调函数):

function(App) { 
    App.initialize();      
} 

App代表JavaScript文件app.js的公开API。所以当你看到诸如App.initialize()之类的东西时,意思就是文件app.js正在公开一个名为initialize的函数,该文件正在调用。