zoukankan      html  css  js  c++  java
  • 如何使用require.js?

    最近几天在学习一个javascript库require.js,也看了一些相关的教学视频,这里推荐一下幕课网阿当老师的《阿当大话西游之Web组件》的教学视频,一整套看下来,参照视频里面的demo从头做一遍,对于require.js的使用以及web组件的编写挺有帮助的,作为菜鸟,看完后觉得获得更多的是一种编程思想的塑造!可以去看看!

    言归正传,什么是require.js?

    RequireJS是一个工具库,主要用于客户端的模块管理。它可以让客户端的代码分成一个个模块,实现异步或动态加载,从而提高代码的性能和可维护性。它的模块管理遵守AMD规范,模块与模块之间可以互相依赖,当然可能会有人会想,模块之间的依赖,要是没法正确地去按照特定顺序加载,会出现错误,AMD规范可以处理这种问题,AMD就是这样一种对模块的定义,使模块和它的依赖可以被异步的加载,但又按照正确的顺序。

    AMD是"Asynchronous Module Definition"的缩写,意思就是"异步模块定义"。它采用异步方式加载模块,模块的加载不影响它后面语句的运行。所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会运行。

    如何使用require.js?

    将require.js下载下来,嵌入网页中,

    <script data-main="scripts/main" src="scripts/require.js"></script>

    这里的data-main属性声明的是入口文件scripts/main.js,这里我们把.js后缀省略掉了。也有以下这种写法:

    <script src="scripts/require.js" data-main="scripts/main" defer async="true" ></script>

    async属性表明这个文件需要异步加载,避免网页失去响应。IE不支持这个属性,只支持defer,所以把defer也写上。同时,官方提供了 require.js和 jquery 的打包版本,于是也可以怎么引入:

    <script src="scripts/require-jquery.js" data-main="scripts/main" defer async="true" ></script>

    RequireJS通过define方法,将代码定义为模块;通过require方法,实现代码的模块加载。

    使用define方法,可以将代码写在一个js文件,独立开来作为一个模块,如我建立一个animate模块(animate.js),如下:

    define(function(){
      function animate(){
        this.name="animate";
      };
      return {
        animate:animate ,
        dec:"这是一个描述"
      };
    })

    将你的模块代码放置在define(function(){  /*代码*/   });,然后将该模块return的对象暴露出来,可以供其他模块依赖此模块的时候,可以去调用这个模块的API。比如我们建立一个tabview模块(tabview.js)去依赖这个animate模块,

    define(['animate'],function(a){
        function tabview(){ 
            this.name= 'tabview';
            this.animate = a.animate.name;
            this.dec = a.dec;
        } 
        return { tabview:tabview };
    })

    分析上面的代码,我们将animate模块引入,并给其赋予一个a的别名。那么在该模块不就可以调用animate模块里面的方法和属性了吗?

    这里我们在多建一个treeview模块(treeview.js),如下:

    define(function(){ 
        function treeview(){ 
            this.name="treeview";
        };
        return { treeview:treeview };
    })

    接下来,我们需要去使用前面我们定义好的模块,便可以require方法来实现,见其写在main.js中,如下:

    require(['tabview','treeview'],function(a,b){ 
        var tab = new a.tabview();
        var tree = new b.treeview();
        alert(tab.name);
        alert(tab.animate);
        alert(tab.dec);
        alert(tree.name);
    });

    使用该方法加载tabview、treeview两个模块,而tabview会去依赖animate模块,由于模块返回的都是对象,那我们可以new一个对象去调用加载模块中的方法和属性!

    在main.js,我们需要去配置一下模块的路径,就那上面例子来说,需要配置一下几个模块的路径,如下:

    require.config({
       paths: {
         "tabview": "js/tabview",
         "animate": "js/animate",
         "treeview": "js/treeview"
       }
     });
    
    //另一种则是直接改变基目录(baseUrl)。后缀.js可以省略
    require.config({
        baseUrl: "js/lib",
        paths: {
          "jquery": "jquery.min",
          "underscore": "underscore.min",
          "backbone": "backbone.min"
        }
    });

    这样require.js便可以很灵活地使用来进行模块化管理了,这里有一个基于require.js去搭建一个web组件(弹窗的demo),很值得学习一下!可以去看看!github地址:https://github.com/xiaobinwu/require.js-Popup-window-

    参考资料:RequireJS和AMD规范

  • 相关阅读:
    C++中字符串与字符串函数的使用
    面试题17:打印从1到最大的n位数
    动态规划:0-1背包
    POJ 2386 Lake Counting (简单深搜)
    HDU 2612 Find a way 简单广搜
    POJ 3669 Meteor Shower (BFS+预处理)
    深搜(DFS)广搜(BFS)详解
    HDU6055 Regular polygon(计算几何)
    hdu 6047 Maximum Sequence 贪心
    hdu 6045 Is Derek lying?(思维推导)
  • 原文地址:https://www.cnblogs.com/wuxiaobin/p/4988410.html
Copyright © 2011-2022 走看看