基于require.js的使用(实例讲解)


Posted in Javascript onSeptember 07, 2017

本篇文章总结下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,否则会出错

以上这篇基于require.js的使用(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JqueryMobile动态生成listView并实现刷新的两种方法
Mar 05 Javascript
JS调试必备的5个debug技巧
Mar 07 Javascript
原生的html元素选择器类似jquery选择器
Oct 15 Javascript
浅谈JavaScript中的string拥有方法的原因
Aug 28 Javascript
Position属性之relative用法
Dec 14 Javascript
js 求时间差的实现代码
Apr 26 Javascript
jQuery实现对网页节点的增删改查功能示例
Sep 18 jQuery
浅谈webpack打包生成的bundle.js文件过大的问题
Feb 22 Javascript
vue使用ajax获取后台数据进行显示的示例
Aug 09 Javascript
vue 搭建后台系统模块化开发详解
May 01 Javascript
vue-router跳转时打开新页面的两种方法
Jul 29 Javascript
Vue+Element UI实现概要小弹窗的全过程
May 30 Vue.js
基于vue.js路由参数的实例讲解——简单易懂
Sep 07 #Javascript
JQuery 获取多个select标签option的text内容(实例)
Sep 07 #jQuery
jQuery UI Draggable + Sortable 结合使用(实例讲解)
Sep 07 #jQuery
jQueryUI Sortable 应用Demo(分享)
Sep 07 #jQuery
Django使用多数据库的方法
Sep 06 #Javascript
node.js实现微信JS-API封装接口的示例代码
Sep 06 #Javascript
详解require.js配置路径的用法和css的引入
Sep 06 #Javascript
You might like
Zend Framework教程之Zend_Form组件实现表单提交并显示错误提示的方法
2016/03/21 PHP
Docker搭建自己的PHP开发环境
2018/02/24 PHP
用JS实现一个TreeMenu效果分享
2011/08/28 Javascript
window.requestAnimationFrame是什么意思,怎么用
2013/01/13 Javascript
jquery提交form表单时禁止重复提交的方法
2014/02/13 Javascript
开发中可能会用到的jQuery小技巧
2014/03/07 Javascript
jquery 扑捉回车键事件代码
2014/04/24 Javascript
javascript每日必学之循环
2016/02/19 Javascript
关于JavaScript中的this指向问题总结篇
2017/07/23 Javascript
JavaScript中变量、指针和引用功能与操作示例
2018/08/04 Javascript
关于vue v-for循环解决img标签的src动态绑定问题
2018/09/18 Javascript
vue使用better-scroll实现下拉刷新、上拉加载
2018/11/23 Javascript
微信小程序 JS动态修改样式的实现方法
2018/12/16 Javascript
JavaScript实现星级评价效果
2019/05/17 Javascript
python中List的sort方法指南
2014/09/01 Python
Python列出一个文件夹及其子目录的所有文件
2016/06/30 Python
Scrapy-redis爬虫分布式爬取的分析和实现
2017/02/07 Python
Python、PyCharm安装及使用方法(Mac版)详解
2017/04/28 Python
利用Python+Java调用Shell脚本时的死锁陷阱详解
2018/01/24 Python
python奇偶行分开存储实现代码
2018/03/19 Python
Django基于ORM操作数据库的方法详解
2018/03/27 Python
python 获取list特定元素下标的实例讲解
2018/04/09 Python
浅析python的优势和不足之处
2018/11/20 Python
Django 源码WSGI剖析过程详解
2019/08/05 Python
Django 解决新建表删除后无法重新创建等问题
2020/05/21 Python
Anaconda+vscode+pytorch环境搭建过程详解
2020/05/25 Python
Python更改pip镜像源的方法示例
2020/12/01 Python
Miller Harris官网:英国小众香水品牌
2020/09/24 全球购物
Chinti & Parker官网:奢华羊绒女装和创新针织设计
2021/01/01 全球购物
车间组长岗位职责
2013/12/20 职场文书
对公司合理化的建议书
2014/03/12 职场文书
贷款担保书范文
2014/05/13 职场文书
支部书记四风对照材料
2014/08/28 职场文书
上班时间打瞌睡检讨书
2014/09/26 职场文书
机电专业毕业生自我鉴定2014
2014/10/04 职场文书
教你做个可爱的css滑动导航条
2021/06/15 HTML / CSS