zoukankan      html  css  js  c++  java
  • 使用requireJS实现模块化编程

      RequireJS是一个工具库,主要用于客户端的模块管理。他可以让客户端的代码分成一个个模块,实现异步或动态加载,从而提高代码的性能和可维护性。他的模块管理遵守AMD规范(Asynchronous Module Definition)。

      RequireJS的基本思想就是:通过define方法,将代码定义为模块;通过require方法,实现代码的模块加载。

    第一步,将requirejs.js文件使用script标签嵌入到网页,然后即可以使用requireJS进行模块化编程。

    <script data-main="scripts/main" src="scripts/requirejs.js"></script>
    上面的js嵌入最好放在html文档的最后面加载,如果放在head头部,最好使用一部加载:
    <script refer async="true" data-main="scripts/main" src="scripts/requirejs.js"></script>
    • define方法:定义模块

    RequireJS要求每个模块放在一个单独的文件,因此需要使用特定的方法实现模块定义。模块定义有两种情况:第一种情况是定义独立模块,即所定义的模块不依赖其他模块;第二种情况是定义非独立模块,及锁定的模块依赖于其他模块。

    1.独立模块:常用方法

    define(function () {
        return {
            method1: function() {},
            method2: function() {},
        };
    });

     

     

    2.非独立模块

    define(['module1', 'module2'], function(m1, m2) {
        return {
            method: function() {
                m1.methodA();
                m2.methodB();
            }
        };
    });
    定义模块时可以使用require方法动态加载需要的模块
    define(function ( require ) {
        var isReady = false, foobar;
     
        require(['foo', 'bar'], function (foo, bar) {
            isReady = true;
            foobar = foo() + bar();
        });
     
        return {
            isReady: isReady,
            foobar: foobar
        };
    });
    • require方法:调用模块

        require方法用于调用模块。他的参数与define方法类似。

    require(['foo', 'bar'], function ( foo, bar ) {
            foo.doSomething();
    });

      define和require这两个定义模块、调用模块的方法,合称为AMD模式。它的模块定义的方法非常清晰,不会污染全局环境,能够清楚地显示依赖关系。

    AMD模式可以用于浏览器环境,并且允许非同步加载模块,也可以根据需要动态加载模块。

      下面使用一个简单的完整实例来更加详细的理解RequireJS的工作原理:

    首先:require.html文件

      

    <html>
    
    <head>
        <meta charset="utf-8" description="require test">
        <link rel="stylesheet" type="text/css" href="../css/require.css">
        <script src="//localhost:35729/livereload.js"></script>
        <script type="text/javascript" refer async="true" data-main="../js/main" src="../js/requirejs.js"></script>
    </head>
    
    <body>
        <div class="header">
            <h2>This is the head</h2>
        </div>
        <div class="main">
            <div class="left">
                <ul class="content-item">
                    <li>时事新闻</li>
                    <li>即时娱乐</li>
                    <li>sports世界</li>
                    <li>军事要闻</li>
                    <li>世界观光</li>
                </ul>
            </div>
            <div class="right">
                <!-- <label for="username">UserName:</label> -->
                <input type="text" id="username" placeholder="username"></input>
                </br>
                <!-- <label for="password">PassWord:</label> -->
                <input type="password" id="password" placeholder="password"></input>
                </br>
                <input type="button" value="Submit" class="submit"></input>
            </div>
        </div>
        <div class="foot">
            <h2>This is the foot</h2>
        </div>
    </body>
    
    </html>

    然后相应的css文件:require.css

     

    html body{
        margin:0;
        border:0;
        background-color: #f5f5d5;
        font-family:Georgia,serif;
        letter-spacing: -0.01em;
        word-spacing:0.2em;
        line-height:1.8em;
    }
    .header,.foot{
        text-align: center;
    }
    .main{
        width:90%;
        margin:0 auto;
    }
    .left{
        width:55%;
        padding:50px;
        background-color: #ddd;
        box-shadow: 10px 5px 6px #888;
    }
    .content-item>li{
        margin-top: 20px;
    }
    .right{
        width:100%;
        margin-left:30%;
        margin-top: 40px;
        box-shadow: 10px 4px 6px #fff;
    }
    .right input{
        display: inline-block;
        width:40%;
        height:40px;
        border:1px solid rgba(0,0,0,0.4);
        margin-bottom:10px;
        background-color: transparent;
        box-shadow: 2px 2px 1px #888;
        font-size: 16px;
    }
    .right input[type="button"]:hover{
        background-color: rgba(254,208,61,0.8);
    }
    .right input[type="button"]{
        cursor: pointer;
    }
    #username,#password{
        text-indent: 40px;
    }

     

     

      最后就是使用define方法定义的模块以及使用require方法加载模块

    define方法定义的validate.js文件:

     

    require.config({
        paths: {
            jquery: 'jquery-2.0.3.min'
        }
    });
    define(['jquery'], function($) {
        "use strict";
        var getUsername = function() {
            return $("#username").val();
        };
        var getPassword = function() {
            return $("#password").val();
        };
        var submit = function() {
            var username,
                password;
            username = getUsername();
            password = getPassword();
            if (username == '')
                alert("there is no username input");
            else if (!/^d{6,9}$/.test(password))
                alert("password is illegal");
            else{
                alert("success");
            }
        };
        return {
            getUsername: getUsername,
            getPassword: getPassword,
            submit: submit
        };
    });

    require方法加载validate文件main.js:

     

    require.config({
        waitSeconds: 0
    });
    require(["validate"], function(validate) {
        "use strict";
        var username,
            password;
        $(".submit").click(function() {
            validate.submit();
        });
    });

     

     

     

     



     

  • 相关阅读:
    165. Compare Version Numbers
    164. Maximum Gap
    3、桶排序
    162. Find Peak Element
    160. Intersection of Two Linked Lists
    155. Min Stack
    154. Find Minimum in Rotated Sorted Array II
    153. Find Minimum in Rotated Sorted Array
    Linux/Unix系统编程手册 第二章:基本概念
    Linux/Unix系统编程手册 第一章:历史和标准
  • 原文地址:https://www.cnblogs.com/lds2014/p/3938115.html
Copyright © 2011-2022 走看看