JS之模块模式应用
之前做过一些简单的单页面应用项目,是对模块模式很好的应用,我决定动手做一个简单的Demo出来。
基本思想是设计一个加载器,当用户点击菜单时,获取不同选项的按钮id,根据不同id实现对页面内容的替换。
页面:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="libs/jquery-1.10.2.js"></script>
<script src="js/data.js"></script>
<script src="js/module.js"></script>
<script src="app.js"></script>
<link rel="stylesheet" type="text/css" href="css/common.css">
<link rel="stylesheet" type="text/css" href="css/table.css">
<title>国战势力统计表</title>
</head>
<body>
<nav class="menu">
<ul>
<li id='wei'>魏国</li>
<li id='shu'>蜀国</li>
<li id='wu'>吴国</li>
<li id='qun'>群雄</li>
</ul>
</nav>
<div class='container'>
<table>
<thead>
<tr>
<td>人物</td>
<td>所属国</td>
<td>血槽</td>
<td>技能</td>
<td>珠联璧合</td>
</tr>
</thead>
<tbody class="tb_body"></tbody>
</table>
</div>
</body>
</html>
实现方法就是根据点击事件获取不同的<li>的id,通过加载器实现对tbody内容的替换。
下面是模块加载器
//module.js
var m1;
m1=(function (window) {
var jquery=window.$,
data=window.data;
if(typeof jquery==='undefined'){
console.log('need load Jquery');
return;
}
return{
loadModule:function (tbody,id) {
tbody.empty();
var tr,
td=$('<td></td>'),
singleCountry; if(typeof id !=='undefined') {
singleCountry = data.importCountry(id);
};
for(var i=;i<singleCountry.length;i++){
tr=$('<tr></tr>');
$.each(singleCountry[i],function (index,ele) {
td.clone().empty().html(ele).appendTo(tr);
});
tr.appendTo(tbody);
}
return tbody;
} } })(window);
最后是数据和事件处理
//数据 data.js
var data;
data=(function (window) { allMember={
wei:[
{name:'曹丕',country:'魏',life:1.5,skill:'行殇、放逐',partner:'甄姬'},
{name:'曹操',country:'魏',life:2,skill:'奸雄',partner:'典韦'},
{name:'李典',country:'魏',life:1.5,skill:'恂恂、忘隙',partner:'乐进'},
{name:'司马懿',country:'魏',life:1.5,skill:'反馈、天命',partner:'0'},
{name:'郭嘉',country:'魏',life:2,skill:'遗技,天妒',partner:'0'},
{name:'more',country:'...',life:2,skill:'...',partner:'...'}
],
shu:[
{name:'大诸葛',country:'蜀',life:1.5,skill:'观星、空城',partner:'黄月英'},
{name:'火诸葛',country:'蜀',life:1.5,skill:'火技、八阵、看破',partner:'黄月英'},
{name:'祝融',country:'蜀',ife:2,skill:'象阵、烈刃',partner:'孟获'},
{name:'赵云',country:'蜀',life:2,skill:'龙胆',partner:'刘禅'},
{name:'黄忠',country:'蜀',life:2,skill:'烈弓',partner:'魏延'}
],
wu:[
{name:'大乔',country:'吴',life:1.5,skill:'流离、国色',partner:'小乔、孙策'},
{name:'小乔',country:'吴',life:1.5,skill:'红颜、天香',partner:'周瑜、大乔'},
{name:'孙权',country:'吴',life:2,skill:'制衡',partner:'周泰'},
{name:'孙尚香',country:'吴',life:2,skill:'枭姬、结姻',partner:'0'}
],
qun:[
{name:'吕布',country:'群',life:2.5,skill:'无双',partner:'貂蝉'},
{name:'袁绍',country:'群',life:2,skill:'乱击',partner:'颜良文丑'},
{name:'蔡文姬',country:'群',life:1.5,skill:'断愁、悲歌',partner:'0'},
{name:'孔融',country:'群',life:1.5,skill:'名士、礼让',partner:''}
],
};
return{
importCountry: function (coun) {
switch(coun){
case 'wei': return allMember.wei;
case 'shu': return allMember.shu;
case 'wu': return allMember.wu;
case 'qun': return allMember.qun;
default: return false;
}
}
}
})(window);
事件处理
$(function(){
$('.menu ul').on('click',function (e) {
var target=e.target,
tbody,
id;
tbody=$('.tb_body');
if(target.tagName.toLowerCase()==='li'){
id=$(target).attr('id');
m1.loadModule(tbody,id);
}
});
});
最后是实现

这是一个简单的单页面应用模式,但仍然是同步加载,刚接触AMD模块化规范。看了老司机给的React例子,除了库的引用,另加一条
<script data-main="app.js" src="r.js"></script>
就可以了,模块之间互相调用通过依赖实现,异步实现,大大提高了效率。
React发布都很久了,现在才准备学习。先从AMD/CMD和requireJS看起吧。前几年都浪费在LOL上了。。。基础太差,毕业开始学习,看样子这一年不好过了,Fighting!
JS之模块模式应用的更多相关文章
- JS通用模块模式 UMD
历史 JS诞生之初面向简单页面开发, 没有模块的概念. 后来页面逐渐复杂, 人类构造到 IIFE 立即执行函数来模拟 模块: 之前也有雅虎的实践,使用命名空间 作为模块名. 最后衍生出 面向各种使用场 ...
- Js模块模式
模块模式 索引 引子 什么是模块模式 命名空间模式 声明依赖 私有和特权成员 即时函数 揭示模块模式 结语 引子 这篇算是对第9篇中内容的发散和补充,当时我只是把模块模式中的一些内容简单的归为函数篇中 ...
- js精要之模块模式
// 模块模式是一种用于创建拥有私有数据的单件对象的模式,基本做法是使用立调函数(IIFE)来返回一个对象 var yourObjet = (function(){ // 私有数据 return { ...
- JS 设计模式四 -- 模块模式
概念 模块模式的思路 就是 就是单例模式添加私有属性和私有方法,减少全局变量的使用. 简单的代码结构: var singleMode = (function(){ // 创建私有变量 var priv ...
- [Js代码风格]浅析模块模式
1.实例解释模块模式 简明扼要的说,经典的模块模式指的定义一个立即执行的匿名函数.在函数中定义私有函数和私有变量并且返回一个包含公共变量和公共函数作为属性和方法的匿名对象. var classicMo ...
- JavaScript设计模式-单例模式、模块模式(转载 学习中。。。。)
(转载地址:http://technicolor.iteye.com/blog/1409656) 之前在<JavaScript小特性-面向对象>里面介绍过JavaScript面向对象的特性 ...
- 初涉JavaScript模式 (11) : 模块模式
引子 这篇算是对第9篇中内容的发散和补充,当时我只是把模块模式中的一些内容简单的归为函数篇中去,在北川的提醒下,我才发觉这是非常不严谨的,于是我把这些内容拎出来,这就是这篇的由来. 什么是模块模式 在 ...
- Node.js之单利模式
在iOS中我们经常用到单利模式,这样就能够实现在多处共享同一数据,那么在Node.js中也存在这种模式. 我们知道,Node.js中模块的概念很重要,在写模块的接口的时候,只需要暴露出一个实例对象就能 ...
- localstorage二次封装-模块模式
var db = function () { // 本地存储前缀,减少命名冲突 var prefix = 'ydb'; return { setPrefix: function (_prefix) { ...
随机推荐
- Spring集成Memcached三种方式(一)
转载:http://blog.csdn.net/u013725455/article/details/52102170 Memcached Client目前有3种: Memcached Client ...
- HTTP 错误500.19 -Internal Server Error 错误代码 0x80070021
转自:http://blog.csdn.net/goux_s/article/details/5676689 错误摘要 HTTP 错误500.19 -Internal Server Error 无法访 ...
- Android四大组件及activity的四大启动模式
Android四大组件 1. 广播接收者的两种类型: (1)系统广播接收者,就是继承BroadcastReceiver这个类,然后还要在清单文件中注册,注册之后给他一个action.当系统发生了这个a ...
- <读书笔记>软件调试之道 :从大局看调试-零容忍策略
声明:本文档的内容主要来源于书籍<软件调试修炼之道>作者Paul Butcher,属于读书笔记.欢迎转载! ---------------------------------------- ...
- devexpress bandgridview使用总结(14.2)
这两天利用bandgridview做表头,希望做成如下形状 在制作过程中发现如果想实现动态表头,代码的书写顺序需要稍加注意 实例化gridband 绑定gridband至bandgridview gr ...
- 44、NLP的其他分词功能测试
1. 命名实体识别功能测试 @Test public void testNer(){ if (NER.create("ltp_data/ner.model")<0) { Sy ...
- 解决openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory错误
问题 在Centos7上编译安装openssl后,运行openssl version出现如下错误: openssl: error while loading shared libraries: lib ...
- Linux踢出其他正在SSH登陆用户
1.查看系统在线用户 [root@testdb ~]#w 2.查看哪个属于此时自己的终端(我开了两个连接) [root@testdb ~]# who am i 3.pkill掉自己不适用的终端 [ro ...
- 使用openssl实现ECDSA签名以及验证功能(附完整测试源码)
突然找到数年前写的这段代码,当是因为对密码学几乎不怎么了解踩了一些坑,现在开源出来方便大家直接利用. ECDSA的全名是Elliptic Curve DSA,也就是椭圆曲线DSA,由于椭圆曲线的复杂性 ...
- Beat版本分工
柯晓鸿031302613:负责服务器的搭建,struts2框架的配置,后台与页面的连整合,部分后台接口,数据库连接查询接口,以及页面js的书写 比例:40% 洪腾飞031302608:负责主要界面的书 ...