Javascript 了解require.js以实现backbone.js

Javascript 了解require.js以实现backbone.js,javascript,backbone.js,requirejs,Javascript,Backbone.js,Requirejs,我正在学习require.js来组织backbone.js模板。我在网上搜索时得到了几本教程。我在那里发现了不同的实现。这就是为什么我不能理解main.js文件的那些代码 //file name main.js require.config({ paths: { jquery: 'libs/jquery/jquery', underscore: 'libs/underscore/underscore', backbone: 'libs/backbon

我正在学习require.js来组织backbone.js模板。我在网上搜索时得到了几本教程。我在那里发现了不同的实现。这就是为什么我不能理解main.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()是什么意思

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

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
});
过去,这通常是使用页面底部的
标记来完成的。问题是这些文件是同步加载的(一个接一个),处理文件之间的依赖关系可能会很繁重。AMD是一个为异步加载Javascript文件而提出的标准

基本原理如下(以代码为例):

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

  • 表示文件路径(或路径别名)的字符串数组。这些将是文件所需的依赖项(想想Java中的导入)

  • 加载第一个参数中指定的依赖项后,Require将调用的回调函数。Require将传入您在第一个参数中指定的实际文件。因此,在您的示例中,您告诉Require'go and load the app.js file',并在加载时将该文件传递到我的回调函数中

  • 在这段代码中(这是回调函数):


    App
    表示Javascript文件
    App.js
    的公开API。因此,当您看到类似于
    App.initialize()
    的内容时,这意味着文件
    App.js
    正在公开一个名为initialize的函数,该文件正在调用该函数

    加载时需要的许多应用程序在加载后都需要启动init()方法或类似的方法。如果你不需要它,那就省去吧。谢谢@MartyMcKeever的回复。App.initialize();?是什么意思??是否有名为initialize()的函数?不是主干函数,但本例假设您需要的任何函数(函数中本地命名的应用程序)都有initialize()方法,需要在启动时立即调用该方法。您所需的应用程序可能有也可能没有这样的启动方法,并且可以命名为任何名称。通常称为init();谢谢@laruiss。initialize()是一个主干函数(),对吗??
     function(App) {
      App.initialize();                    
    }