requirejs data-main 多个页面指向同一个入口js

一、场景描述

了解requirejs的童鞋都知道引入requirejs的时候需要根据data-main属性来指定入口js文件,这其实很尴尬,也就是谁基本上每个页面如果要进行模块化开发的话都需要建立一个入口文件,同时在requirejs中进行模块化配置

 

二、一个不易发现的小技巧

html的script标签也是可以指定id和其他属性的,即可以通过document.getElementById来获取script内容,不知道你看到这句描述自己心里也有了方案。

 

三、实现的代码

1、页面引入requirejs 和 设置id和当前页面信息的属性.

 

<script data-main="/res/js/require.config" id="current-page" current-page ="signin" src="/res/js/require.js" defer async="true" ></script>

 

 

2、编写require.config.js 根据不同的页面去初始化不同的页面信息

 

 

/**
 * 1、所有页面使用公共的require配置<br>
 * 2、根据current-page去加载相应地模块,不需要的模块不要去加载<br>
 * 3、每个模块都要按约定去对外暴露一个init的初始化方法,用于页面信息加载时间监听
 * 
 */


var shim = {    
	'scroll': {      
		deps: ['jquery'],
		exports: 'jQuery.fn.scroll'    
	},
	"jquery.json-2.4": {
		deps: ['jquery'],
		exports: "JSON" 
	} 
};

require.config({    
	paths: {      
		"jquery": "/res/js/jquery-2.1.4.min",
		"cookie": "/res/js/jquery.cookie",
		"common": "/res/js/xboss.wap.common.1.0"
	},
	shim: shim
});


require(["jquery"], function ($) {

	require(["common"], function (common) {



		commonInit($, common);
		var currentPage = $("#current-page").attr("current-page");

		var targetModule = $("#current-page").attr("target-module");
		if (targetModule) {
			// 页面加载完毕后再执行相关业务代码比较稳妥
			$(function () {
				require([targetModule], function (targetModule) {
					// 不要在这里写业务代码,全部统一调用init方法,也就是每个模块都暴露一个init方法用于事件监听,页面内容加载等
					targetModule.init(currentPage);
				});
			});
			return;
		}



	});



});

 

 

3、定义模块,实现初始化init方法进行事件监听和页面信息初始化

 

        

define(['jquery', "common"], function ($, common) { 

	   
	var customer = {

	};

	/**
	 * 每个页面都有一个init初始化函数供公共的require.js调用(这里可以进行页面内容初始化和事件绑定)
         * 根据不同的page初始化不同的页面,绑定不同的事件
	 */
	customer.init = function (page) {          common.info("开始初始化页面信息");
	};
	
	customer.login = function () {

	};
	return customer;
});

 

 

转载于:https://my.oschina.net/fengshuzi/blog/650710

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值