RequireJS多页面应用实例分析


Posted in Javascript onJune 29, 2016

本文是requireJS的一些知识点的总结,配上多页面应用中的实例分析。

本案例的目录结构如下:

requireJS API的三个主要函数:define(创建模块),require(加载模块),config(配置)

1、 HTML文件中加载JS文件

page1.html内容如下:

<!DOCTYPE html>
<html>
<head>
<title>Page 1</title>
<script data-main="scripts/page1" src="scripts/lib/require.js"></script>
</head>
<body>
<a href="page2.html">Go to Page 2</a>
</body>
</html>

page2.html内容如下:

<!DOCTYPE html>
<html>
<head>
<title>Page 2</title>
<script data-main="scripts/page2" src="scripts/lib/require.js"></script>
</head>
<body>
<a href="page1.html">Go to Page 1</a>
</body>
</html>

知识扩展:

data-main属性指定网页程序的主模块,这个文件被requireJS首先加载。由于requireJS默认的文件后缀名是js,所以可以把page1.js简写成page1

加载脚本文件的根路径优先规则

用require()加载模块时,省略.js后缀,会从baseUrl下查找;如果带有.js后缀、或以”/"开始、或包含URL协议(http/https)则将根

据你的具体路径设置去查找

config > data-main > 默认baseUrl

不对data-main和config进行设置,则默认baseUrl为引用require.js的那个HTML页面所在目录

设置data-main,则baseUrl为主模块所在目录(如第一段HTML中的主模块为page1.js,因此以其所在目录/scripts为根目录)

配置config,显式设置baseUrl,也可为每一个模块单独设置路径

2、对模块的路径等进行配置

使用require.config()方法,可以对模块的加载行为进行自定义。在多页面应用中,可以将配置写在共用的文件中,如本例中的common.js文件,然后各个页面加载当前配置后,在回调函数中再加载各自需要的模块。

common.js代码如下:

require.config({
baseUrl: 'scripts/app',
paths: {
jquery: [
'http://lib.sinaapp.com/js/jquery/1.9.1/jquery-1.9.1.min',
'../lib/jquery'
]
}
});

知识扩展:

支持的配置项:

baseUrl :

所有模块的查找根路径。注意:当加载的js文件(以.js结尾、以”/”开头、含有协议),不会使用baseUrl;

paths :

path映射那些不直接放置于baseUrl下的模块名。设置path时起始位置是相对于baseUrl的,除非该path设置以"/"开头或含有URL协议;

注意:在paths中定义的路径不能含有.js后缀,因为路径解析机制会自动添加上.js后缀;而且加载路径可以设置多个,如从CDN加载失败,则加载本地js文件;

shim:

为那些没有使用define()来声明依赖关系的模块进行配置;

其中需要注意两个参数:

(1)exports值(输出的变量名),暴露方法接口

(2)deps数组,表明该模块的依赖性

如:

require.config({
baseUrl: '/scripts/lib',
shim:{
zepto: {
exports: '$'
},
backbone: {
deps: ['underscore', 'zepto'],
exports: 'Backbone'
},
'zepto.animate': ['zepto']
}
});

3、模块的加载

page1.js代码如下:

require(['./common'], function (common) {
require(['sayPage1'], function (sayPage1) {
sayPage1.hello();
});
});

page2.js代码如下:

require(['./common'], function (common) {
require(['sayPage2'], function (sayPage2) {
sayPage2.hello();
});
});

知识拓展: 

 require()函数接受两个参数。第一个参数是一个数组,表示所依赖的模块;第二个参数是一个回调函数,当前面指定的模块都加载成功后,它才会被调用。加载的模块可以作为回调函数的参数进行调用。

这里为了保证配置完成后才加载需要的模块,主要是为了路径的正确解析,在回调函数中再进行require。

4、模块的定义

sayPage1.js中的代码:

define(['jquery'], function($) {
function sayHi(){
$('body').append('<h1>Hello page1!</h1>');
}
return {
hello: sayHi
}
});

知识扩展:

define函数也接受两个参数。第一个参数为所依赖模块组成的数组,第二个参数是一个回调函数。

当然最后上线的时候还要进行JS文件的合并与压缩,可以利用r.js,方便快捷~

以上所述是小编给大家介绍的RequireJS多页面应用实例分析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
原型方法的不同写法居然会影响调试的解决方法
Mar 08 Javascript
IE与Firefox下javascript getyear年份的兼容性写法
Dec 20 Javascript
JQuery实现绚丽的横向下拉菜单
Dec 19 Javascript
jquery模拟LCD 时钟的html文件源代码
Jun 16 Javascript
javascript将浮点数转换成整数的三个方法
Jun 23 Javascript
JavaScript使表单中的内容显示在屏幕上的方法
Jun 29 Javascript
JS组件Form表单验证神器BootstrapValidator
Jan 26 Javascript
Bootstrap中表单控件状态(验证状态)
Aug 04 Javascript
Bootstrap表单控件使用方法详解
Jan 11 Javascript
原生js实现倒计时--2018
Feb 21 Javascript
vue 文件目录结构详解
Nov 24 Javascript
JS基于ES6新特性async await进行异步处理操作示例
Feb 02 Javascript
全面了解JS中的匿名函数
Jun 29 #Javascript
大型JavaScript应用程序架构设计模式
Jun 29 #Javascript
基于JS模仿windows文件按名称排序效果
Jun 29 #Javascript
JavaScript中闭包的写法和作用详解
Jun 29 #Javascript
浅谈window.onbeforeunload() 事件调用ajax
Jun 29 #Javascript
json对象转为字符串,当做参数传递时加密解密的实现方法
Jun 29 #Javascript
jQuery ajax调用后台aspx后台文件的两种常见方法(不是ashx)
Jun 28 #Javascript
You might like
星际争霸 Starcraft 秘技补丁
2020/03/14 星际争霸
一个连接两个不同MYSQL数据库的PHP程序
2006/10/09 PHP
有关JSON以及JSON在PHP中的应用
2010/04/09 PHP
解析php入库和出库
2013/06/25 PHP
浅谈ThinkPHP的URL重写
2014/11/25 PHP
php简单计算权重的方法示例【适合抽奖类应用】
2019/06/10 PHP
初学JavaScript_03(ExtJs Grid的简单使用)
2008/10/02 Javascript
jquery text,radio,checkbox,select操作实现代码
2009/07/09 Javascript
Pro JavaScript Techniques学习笔记
2010/12/28 Javascript
当前页禁止复制粘贴截屏代码小集
2013/07/24 Javascript
js setTimeout 常见问题小结
2013/08/13 Javascript
node.js中的fs.chmodSync方法使用说明
2014/12/18 Javascript
js实现右下角提示框的方法
2015/02/03 Javascript
JS仿Windows开机启动Loading进度条的方法
2015/02/26 Javascript
详解JavaScript正则表达式之分组匹配及反向引用
2016/03/09 Javascript
jQuery点击输入框显示验证码图片
2016/05/19 Javascript
Angular 2应用的8个主要构造块有哪些
2016/10/17 Javascript
AngularJS的ng Http Request与response格式转换方法
2016/11/07 Javascript
javaScript生成支持中文带logo的二维码(jquery.qrcode.js)
2017/01/03 Javascript
node vue项目开发之前后端分离实战记录
2017/12/13 Javascript
ES6 Array常用扩展的应用实例分析
2019/06/26 Javascript
JavaScript中Dom操作实例详解
2019/07/08 Javascript
[44:40]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
python使用xpath中遇到:到底是什么?
2018/01/04 Python
Flask框架各种常见装饰器示例
2018/07/17 Python
深入浅析Python获取对象信息的函数type()、isinstance()、dir()
2018/09/17 Python
Python实现数据结构线性链表(单链表)算法示例
2019/05/04 Python
Python 正则表达式 re.match/re.search/re.sub的使用解析
2019/07/22 Python
windows环境中利用celery实现简单任务队列过程解析
2019/11/29 Python
python实现将range()函数生成的数字存储在一个列表中
2020/04/02 Python
国外的一些J2EE面试题一
2012/10/13 面试题
小学语文教师年度考核个人总结
2015/02/05 职场文书
银行求职信范文
2019/05/13 职场文书
导游词之井冈山
2019/11/20 职场文书
用python自动生成日历
2021/04/24 Python
PHP实现两种排课方式
2021/06/26 PHP