您的位置:首页 > 产品设计 > UI/UE

Require.js

2017-09-05 13:59 134 查看
<script data-main="src/app" src="src/lib/require.js"></script>
backbone插件中,需要通过script标签引入require.js。
data-main属性的作用是,指定网页程序的主模块,即网页的主模块是src下的app.js
1、 网页主模块是app.js,主模块依赖于其他的模块,这样就会用到require()和require.config()

当需要依赖的模块和主模块在同一目录下时,使用require()或require.config()

当需要依赖的模块和主模块不在同一目录下时,使用require.config()

2、require(['jquery', 'underscore','backbone'], function ($, _, Backbone){
    // some code here
});
   Require()函数中有两个参数 ,第一个参数是数组,内容是主模块依赖的模块,例子中的主模块依赖于jquery.js、underscore.js、backbone.js
      第二个参数是一个回调函数,当前指定的模块都加载成功后,它将被调用。加载的模块将以参数的形式传入该函数,从而在回调函数内部就可以使用这些模块。
3、当主模块app.js和三个需要依赖的模块jquery.js、underscore.js、backbone.js不在同一个目录

下的时候,可以使用require.config()

require.config()中参数paths是个对象,paths属性指定各个模块的加载路径。baseUrl表示的是改变基目录,如下(2)所示

(1) require.config({

    paths: {

      "jquery":"lib/jquery.min",

      "underscore":"lib/underscore.min",

      "backbone":"lib/backbone.min"

    }

  });

(2) require.config({

    baseUrl: "js/lib",

    paths: {

      "jquery":"jquery.min",

      "underscore":"underscore.min",

      "backbone":"backbone.min"

    }

  });

(3)如果某个模块在另一台主机上,也可以直接指定它的网址,比如:

  require.config({

    paths: {

      "jquery":"https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min"

    }

  });
4、按照AMD规范,模块必须采用特定的define()函数来定义。如果一个模块不依赖其他模块,那么可以直接定义在define()函数之中。
例: 假定现在有一个math.js文件,它定义了一个math模块。那么math.js就要这样写:

  // math.js

  define(function (){

    var add = function (x,y){

      return x+y;

    };

    return {

      add: add

    };

  });

加载方法如下:

  // main.js

  require(['math'], function (math){

    alert(math.add(1,1));

  });

如果这个模块还依赖其他模块,那么define()函数的第一个参数,必须是一个数组,指明该模块的依赖性。

  define(['myLib'], function(myLib){

    function foo(){

      myLib.doSomething();

    }

    return {

      foo : foo

    };

  });

当require()函数加载上面这个模块的时候,就会先加载myLib.js文件。
5、加载非规范的模块

这样的模块在用require()加载之前,要先用require.config()方法,定义它们的一些特征。

例:underscore和backbone这两个库,都没有采用AMD规范编写。如果要加载它们的话,必须先定义它们的特征。

 require.config({

    shim: {

//shim是用来配置不兼容的模块。具体来说,每个模块要定义exports值(输出的变量名),表明这个模块外部调用时的名称

      'underscore':{

        exports: '_'

      },

      'backbone': {

        deps: ['underscore', 'jquery'],

//deps数组,表明该模块的依赖性。即backbone.js依赖于underscore.js和jquery.js

        exports: 'Backbone'

      }

    }

  });

80be
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: