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 相关文章推荐
JavaScript 在网页上单击鼠标的地方显示层及关闭层
Dec 30 Javascript
javascript将DOM节点添加到文档的方法实例分析
Aug 04 Javascript
jQuery ajax请求返回list数据动态生成input标签,并把list数据赋值到input标签
Mar 29 Javascript
JavaScript动态添加事件之事件委托
Jul 12 Javascript
js通过classname来获取元素的方法
Nov 24 Javascript
jQuery实现单击按钮遮罩弹出对话框效果(2)
Feb 20 Javascript
bootstrap的工具提示实例代码
May 17 Javascript
ES6学习教程之对象字面量详解
Oct 09 Javascript
一步步教你利用webpack如何搭一个vue脚手架(超详细讲解和注释)
Jan 08 Javascript
vue弹窗组件的实现示例代码
Sep 10 Javascript
el-table表头根据内容自适应完美解决表头错位和固定列错位
Jan 07 Javascript
手写Vue2.0 数据劫持的示例
Mar 04 Vue.js
全面了解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
使用sockets:从新闻组中获取文章(一)
2006/10/09 PHP
php5数字型字符串加解密代码
2008/04/24 PHP
PHP数组内存耗用太多问题的解决方法
2010/04/05 PHP
php学习笔记之 函数声明
2011/06/09 PHP
php数组函数序列之ksort()对数组的元素键名进行升序排序,保持索引关系
2011/11/02 PHP
php中生成随机密码的自定义函数代码
2013/10/21 PHP
php生成html文件方法总结
2014/12/01 PHP
CI框架使用composer安装的依赖包步骤与方法分析
2016/11/21 PHP
添加到收藏夹代码(兼容几乎所有的浏览器)
2007/01/09 Javascript
点击页面其它地方隐藏该div的两种思路
2013/11/18 Javascript
使用jquery实现仿百度自动补全特效
2015/07/23 Javascript
谈谈encodeURI和encodeURIComponent以及escape的区别与应用
2015/11/24 Javascript
JS获取及验证开始结束日期的方法
2016/08/20 Javascript
js自定义Tab选项卡效果
2017/06/05 Javascript
Swiper实现轮播图效果
2017/07/03 Javascript
解决layer弹出层msg的文字不显示的问题
2019/09/11 Javascript
过滤器vue.filters的使用方法实现
2019/09/18 Javascript
Vue 图片压缩并上传至服务器功能
2020/01/15 Javascript
JavaScript原型继承和原型链原理详解
2020/02/04 Javascript
基于html+css+js实现简易计算器代码实例
2020/02/28 Javascript
[03:53]2016国际邀请赛中国区预选赛第三日TOP10精彩集锦
2016/06/29 DOTA
phpsir 开发 一个检测百度关键字网站排名的python 程序
2009/09/17 Python
Python中的多重装饰器
2015/04/11 Python
django的登录注册系统的示例代码
2018/05/14 Python
windows下pycharm安装、创建文件、配置默认模板
2018/07/31 Python
django利用request id便于定位及给日志加上request_id
2018/08/26 Python
python的pip有什么用
2020/06/17 Python
社区网格化管理实施方案
2014/03/21 职场文书
高三励志标语
2014/06/05 职场文书
厕所文明标语
2014/06/11 职场文书
师德师风自我剖析材料
2014/09/27 职场文书
世界红十字日活动总结
2015/02/10 职场文书
有关水浒传的读书笔记
2015/06/25 职场文书
新闻发布会新闻稿
2015/07/17 职场文书
志愿者工作心得体会
2016/01/15 职场文书
应届毕业生的自我评价
2019/06/21 职场文书