基于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 相关文章推荐
《JavaScript DOM 编程艺术》读书笔记之JavaScript 简史
Jan 09 Javascript
js实现下拉框选择要显示图片的方法
Feb 16 Javascript
.NET微信公众号开发之创建自定义菜单
Jul 16 Javascript
Bootstrap CDN和本地化环境搭建
Oct 26 Javascript
3种不同的ContextMenu右键菜单实现代码
Nov 03 Javascript
vue.js入门(3)——详解组件通信
Dec 02 Javascript
jQuery插件zTree实现的基本树与节点获取操作示例
Mar 08 Javascript
JS实现加载和读取XML文件的方法详解
Apr 24 Javascript
解决vue项目报错webpackJsonp is not defined问题
Mar 14 Javascript
简单的vuex 的使用案例笔记
Apr 13 Javascript
vue项目中跳转到外部链接的实例讲解
Sep 20 Javascript
vue框架中props的typescript用法详解
Feb 17 Javascript
基于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
Base64在线编码解码实现代码 演示与下载
2011/01/08 PHP
php操作xml
2013/10/27 PHP
php实现将数组转换为XML的方法
2015/03/09 PHP
Prototype ObjectRange对象学习
2009/07/19 Javascript
JavaScript Event学习第十章 一些可替换的事件对
2010/02/10 Javascript
30个最佳jQuery Lightbox效果插件分享
2011/04/11 Javascript
给jqGrid数据行添加修改和删除操作链接(之一)
2011/11/04 Javascript
javascript简易缓动插件(源码打包)
2012/02/16 Javascript
jquery入门——事件机制之事件中的冒泡现象示例解释
2020/09/12 Javascript
javascript:void(0)使用探讨
2013/08/27 Javascript
使用CSS和jQuery模拟select并附提交后取得数据的代码
2013/10/18 Javascript
jQuery 1.9.1源码分析系列(十五)之动画处理
2015/12/03 Javascript
jQuery UI Bootstrap是什么?
2016/06/17 Javascript
详解原生js实现offset方法
2017/06/15 Javascript
解决JS内存泄露之js对象和dom对象互相引用问题
2017/06/25 Javascript
JS全角与半角转化实例(分享)
2017/07/04 Javascript
jQuery实现参数自定义的文字跑马灯效果
2018/08/15 jQuery
vue的过滤器filter实例详解
2018/09/17 Javascript
在element-ui的el-tree组件中用render函数生成el-button的实例代码
2018/11/05 Javascript
python实现2048小游戏
2015/03/30 Python
利用ctypes提高Python的执行速度
2016/09/09 Python
Python实现按学生年龄排序的实际问题详解
2017/08/29 Python
Python爬虫实现全国失信被执行人名单查询功能示例
2018/05/03 Python
Django发送邮件功能实例详解
2019/09/02 Python
python MD5加密的示例
2020/10/19 Python
艺龙旅行网酒店预订:国内、港澳台酒店
2018/06/26 全球购物
Dodax奥地利:音乐、电影、书籍、玩具、电子产品等
2019/08/31 全球购物
乐高西班牙官方商店:LEGO Shop ES
2019/12/01 全球购物
Weblogic和WebSphere不同特点
2012/05/09 面试题
项目经理任命书
2014/06/04 职场文书
宣传活动总结范文
2014/07/01 职场文书
学生自我鉴定格式及范文
2014/09/16 职场文书
物业保洁员岗位职责
2015/02/13 职场文书
2015年营销工作总结范文
2015/04/23 职场文书
nginx实现发布静态资源的方法
2021/03/31 Servers
PyQt5 QThread倒计时功能的实现代码
2021/04/02 Python