require.js使用讲解

1.为什么使用require.js? 

使用之前,我的页面的js是这样的

<script type="text/javascript" src="/js/jquery.min.js"></script>
<script type="text/javascript" src="/js/bootstrap.min.js"></script>
<script type="text/javascript" src="/js/jquery.bootstrap.min.js"></script>
<script type="text/javascript" src="/js/plugins/layer/layer.min.js"></script>
<script src="/Scripts/common/zTree/js/jquery.ztree.core.js"></script>
<script src="/Scripts/common/zTree/js/jquery.ztree.excheck.js"></script>
<script type="text/javascript" src="/js/plugins/layer/laydate/laydate.js"></script>
<script type="text/javascript" src="/js/Bootstrap-Select/bootstrap-select.js"></script>

 由于这些js代码一般都写在模板中,因此不管我的页面如何简单,用不用的到这么多js,这些js都会加载,而我们大家都知道,加载js时页面会停止渲染,直到js加载完成后,才继续渲染,因此造成页面响应时间会很长,

而且你无法知晓这么多js的依赖关系,如果你移动了js的前后关系,就会出现一些错误。

 

require.js的作用就是为了解决这两个问题:

  1.实现js文件的异步加载,减少网页响应的时间

  2.管理js之间的依赖性,便于维护 

2.使用方法讲解

 首先删除掉模板页中的这8个js引用,在自己的页面引入require.js(没有的可自行去官网下载):

<script src="~/Scripts/common/require.js" data-main="/Scripts/main" data-entry="/Scripts/category/category.js"></script>

 data-main配置的是主要的js,我这里配置的是网站根目录下Scripts文件下的main.js,用于全局的配置。

 data-entry是我扩展的属性,用于加载该页面独有的js。

 以下为main.js代码:

require.config({
    baseUrl: 'http;//www.cdnxxx.com/',
    paths: {
        "jquery": "hplus/js/jquery.min",
        "bootstrap": "hplus/js/bootstrap.min",
     "bootstrapselect": "/Content/Bootstrap-Select/bootstrap-select",
       "laydate": "/Scripts/plugins/laydate/laydate",
        "utility": "/Scripts/utility"
    },
    shim: {
        'bootstrapselect': {
            deps: ['jquery', 'bootstrap']
        },
        'bootstrap': {
            deps: ['jquery']
        },
        'utility': {
            deps: ['jquery'],
            exports: 'Utility'
        },
      'laydate': {
            exports: 'laydate'
        }
    }
});

require(['jquery'], function ($) {

    var entry = $('[data-entry]').data("entry");
    require([entry]);
});

 其中require.config()方法配置js的路径,baseUrl指的是基目录,paths中配置的路径默认会在前方加上baseUrl的值;

 shim参数配置js的依赖项和输出对象,如bootstrapselect依赖于jquery和bootstrap,laydate输出/返回的对象为laydate

 当前页面加载的category.js代码如下:

define(['jquery', 'utility', 'bootstrap', 'bootstrapselect'], function ($, Utility) {

    var category = {
        init: function () {
            this.setOptions();
            this.bindEvent();

            self.getList();
        },
        setOptions: function () {
            this.btnQuery = $("#btnQuery");
            this.divList = $("#divList");
        },
        bindEvent: function () {
            var self = this;
            self.btnQuery.on("click", function () { self.getList(); });
        },
        getList: function () {
            var self = this;

            $.post(self.divList.data("url"), { channelCode: $.trim($("#ddlChannel").val()) }, function (result) {
                self.divList.html(result);
            });
        }
    };

    $(function () {
        category.init();
    });
});

 define方法的第1个参数为数组,代表当前页面要加载的js,如上面所示,当前页面加载了jquery,utility,bootstracp,bootstracpselect这4个js,

 第二个参数为回调函数,当第一个参数中的js异步加载完成后,会被调用,方法中的$对应的jquery返回的对象,Utility对应的unility返回的对象,这两个对象可以在回调函数的任何地方使用。 

截止目前,我们已了解require.js的使用方法,如果开发其它页面,可以按需加载,如页面只需要jquery就够了,则只引入jquery即可:

define(['jquery'], function ($) {
  // some code
});

 

3.注意事项

require.config({
    baseUrl: 'http;//www.cdnxxx.com/',
    paths: {
        "jquery": "hplus/js/jquery.min",
        "bootstrap": "hplus/js/bootstrap.min",
     "bootstrapselect": "/Content/Bootstrap-Select/bootstrap-select",
       "laydate": "/Scripts/plugins/laydate/laydate",
        "utility": "/Scripts/utility"
    }
});

 1.在以上代码中,由于bootstrapselect,laydate,utility配置的路径都以"/"开头,因此加载时不会被加上baseUrl的值,而jquery,bootstrap真正加载时会被加上baseUrl的值,即http://www.cdnxxx.com/hplus/js/juqery.min.js

 2.paths中配置的路径默认都会加上.js,因此配置时应省略.js,否则会出错 

转载于:https://my.oschina.net/sichunchen/blog/1546833

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值