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去除空格的几种方法
Oct 03 Javascript
JavaScript高级程序设计(第3版)学习笔记5 js语句
Oct 11 Javascript
浅析ajax请求json数据并用js解析(示例分析)
Jul 13 Javascript
JavaScript判断变量是否为undefined的两种写法区别
Dec 04 Javascript
jQuery Easyui Datagrid实现单行的上移下移及保存移动的结果
Aug 15 Javascript
js仿手机页面文件下拉刷新效果
Oct 14 Javascript
JavaScript对象引用与赋值实例详解
Mar 15 Javascript
JavaScript闭包的简单应用
Sep 01 Javascript
Django+vue跨域问题解决的详细步骤
Jan 20 Javascript
微信小程序实现图片翻转效果的实例代码
Sep 20 Javascript
JavaScript switch语句使用方法简介
Dec 30 Javascript
JS获取表格视图所选行号的ids过程解析
Feb 21 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
php正则校验用户名介绍
2008/07/19 PHP
php print EOF实现方法
2009/05/21 PHP
php导入导出excel实例
2013/10/25 PHP
php定义参数数量可变的函数用法实例
2015/03/16 PHP
PHP简单日历实现方法
2016/07/20 PHP
Yii CDBCriteria常用方法实例小结
2017/01/19 PHP
动态添加js事件实现代码
2009/03/12 Javascript
js获取指定的cookie的具体实现
2014/02/20 Javascript
SublimeText自带格式化代码功能之reindent
2015/12/27 Javascript
浏览器检测JS代码(兼容目前各大主流浏览器)
2016/02/21 Javascript
Javascript 两种刷新方法以及区别和适用范围
2017/01/17 Javascript
基于webpack 实用配置方法总结
2017/09/28 Javascript
浅析Vue.js中v-bind v-model的使用和区别
2018/12/04 Javascript
jQuery实现的自定义轮播图功能详解
2018/12/28 jQuery
javascript导出csv文件(excel)的方法示例
2019/08/25 Javascript
vue 使用饿了么UI仿写teambition的筛选功能
2021/03/01 Vue.js
python生成器表达式和列表解析
2016/03/10 Python
用Python删除本地目录下某一时间点之前创建的所有文件的实例
2017/12/14 Python
Python Socket使用实例
2017/12/18 Python
TensorFlow实现非线性支持向量机的实现方法
2018/04/28 Python
对Tensorflow中的变量初始化函数详解
2018/07/27 Python
python logging模块书写日志以及日志分割详解
2019/07/22 Python
twilio python自动拨打电话,播放自定义mp3音频的方法
2019/08/08 Python
Python的形参和实参使用方式
2019/12/24 Python
Python之Class&amp;Object用法详解
2019/12/25 Python
Window系统下Python如何安装OpenCV库
2020/03/05 Python
Anaconda3中的Jupyter notebook添加目录插件的实现
2020/05/18 Python
CSS3中的transform属性进行2D和3D变换的基本用法
2016/05/12 HTML / CSS
HTML5 Canvas 起步(1) - 基本概念
2009/05/12 HTML / CSS
工程造价专业大专生求职信
2013/10/06 职场文书
会计专业推荐信
2013/10/29 职场文书
网络研修随笔感言
2014/02/17 职场文书
食品采购员岗位职责
2014/04/14 职场文书
保洁公司服务承诺书
2014/05/28 职场文书
大学生就业自荐书
2014/06/16 职场文书
建筑工程造价专业自荐信
2014/07/08 职场文书