`
zhumq1982
  • 浏览: 9615 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

最近在看SEAJS,于是遍自己也写了个关于模块化JS的框架

阅读更多

http://websiteui.com/html5/js/www/page/demo.html

 

上面是演示地址

 

 

使用方法:

 

(首先声明这框架的每个HTML里都有对应的PAGE文件。如DEMO.HTML,必然在JS里有对应的DEMO.JS)

 

首先做页面的工作:

在demo.html里调用require.js,执行初始化init('对应的js文件')

 

<script src="../js/require.js"></script>
<script>
	init('demo');
</script>
 

 

这样require就会去请求对应page目录下的JS文件----demo.js

 

然后是PAGE目录下的JS文件:

先在demo.JS中,指定需要用到哪些控件,如autocomplete 、 dialog,

 

 

require('autocompele.js')
require('dialog.js')
 

 

接着在demo.js中定义

 

 

defined('demo',function(){
   ooxx()~~~~
})
 

 

便完成了整个页面JS的加载定义及使用,至于autocomplete dialog里需要用到哪些包,这是控件所关心的,而不需要user在这里定义。

 

 

至于所调用的JS文件 也一样

如autocomplete.js

 

 

require('../js/core/core.js');
require('../js/core/extend.js');
defined('widget.autocomplete',function(){
    我要开始做autocomplete了
})

 只需要定义控件所需要的模块即可

 

 

 

 

 


实现原理:

 

这里只说原理不分析代码

 

步骤1、 加载:

 

首先有2个函数,一个叫require,一个叫defined

 

require决定每个模块需要加载什么 defined决定具体模块做些啥事

 

 

另外有个空对象list

这个是所加载脚本的列表对象,每创建一个SCRIPT的请求,遍添加一项记录,同时设置该条状态为0,完成加载后,设置状态为1;

 

require函数如何工作:

如:require('a.js');

 

1 根据参数a.js,在HEAD创建SCRIPT标签,并且记录在list对象中,加载完成后,修改标记状态1,并且遍历list的所有记录是否全部为1,如果全部为1时,说明加载完成 可以开始执行。

举例说明:

如:我有A B 3个JS需要加载,A依赖B

 

那我在require.js加载完成后,首先会去请求A.JS,此时,list对象变成为了 {'a.js':0},

 

a.js在加载完成后,自然会运行a.js里的代码,当发现a.js里又有require函数请求了b.js,那便会再次更改list对象为{a.js:0,b.js:0},

 

这时候a.js运行结束,执行a.js的onload,修改list对象为{a.js:1,b.js:0},然后对list进行检查,如果有一项为0 说明加载还未完成,

 

等b.js加载完成后,再次运行onload 把list对象改为{a.js:1,b.js:1},再次进行检查,发现全部为1,则加载步骤已经完成。

 

这样加载步骤就OK了,执行onload事件,开始运行具体库里的函数。

 

步骤二,整理函数包

 

这里我采用的YUI的做法

有2个对象 分别是requireOrder 和 model,

 

requireOrder 里 定义了所有函数名的执行顺序,

model 则接受了每个JS包加载完成的defined函数,

 

 

由于加载JS文件的顺序是不定的,往往功能包优先于核心包加载完成。甚至有可能由于网速和JS文件大小的原因,加载完成后的顺序会很混乱

如加载顺序为

控件->功能->核心代码

 

或者因为网络问题,添加到model里的函数顺序变成了

功能->控件->核心代码

 

那按这样的顺序必然会出错

 

所以就在requireOrder里定义好顺序为

核心代码->功能->控件

 

强制按requireOrder里的顺序去执行即可。

 

分享到:
评论

相关推荐

    seajs模块加载框架

    SeaJS是一个遵循CommonJS规范的JavaScript模块加载框架,可以实现JavaScript的模块化开发及加载机制。

    SeaJS(Javascript模块加载框架)v0.9.1免费版

    CommonJS是一个为服务器端JavaScript设计的一套API,但SeaJS将其应用到了浏览器环境,使得前端开发也能享受到模块化的便利。在SeaJS中,开发者可以定义、依赖和执行模块,从而将复杂的项目分解为小而独立的组件,每...

    SeaJS(Javascript 模块加载框架) v1.0.2.zip

    SeaJS 正是这样一个工具,它遵循了 CommonJS 规范,允许开发者在浏览器环境中实现类似服务器端 Node.js 的模块化开发体验。 CommonJS 是一套定义了模块规范的接口标准,主要应用于服务器端编程,但 SeaJS 将这一...

    SeaJS(Javascript 模块加载框架) v1.0.2

    SeaJS 是一款强大的JavaScript模块加载框架,其设计目标是遵循CommonJS规范,为开发者提供一个在浏览器环境中组织和管理代码的高效工具。CommonJS规范旨在促进JavaScript模块化,使得代码可复用性和可维护性得到显著...

    seaJS框架简介和完整例子

    总结来说,SeaJS作为一个前端模块加载器,为JavaScript提供了CommonJS风格的模块化机制,帮助开发者更好地组织代码,提高代码复用性和可维护性。通过学习和应用SeaJS,开发者可以在浏览器环境中享受到类似于服务器端...

    seajs官方小实例

    Seajs 是一个用于浏览器端的模块加载器,它遵循 CommonJS 规范,让 JavaScript 开发者能够在浏览器环境中实现模块化开发,提高代码的可维护性和复用性。Seajs 的核心理念是通过模块化解决 JavaScript 开发中的依赖...

    seajs-2.2.3

    Seajs-2.2.3 是一个开源的 JavaScript 模块加载器,旨在为开发者提供简单、极致的模块化开发体验。它强调的是简洁、自然的代码书写和组织方式,使得项目管理和协同工作变得更加高效。Seajs 在JavaScript社区中扮演着...

    seajs源代码

    Seajs是一款轻量级的JavaScript模块加载器,它遵循CommonJS规范,旨在解决浏览器环境中的模块化问题。在深入理解seajs源代码之前,我们首先需要了解模块化的基本概念和CommonJS规范。 模块化是软件开发中的一种组织...

    seajs代码以及文档,帮助你学习。

    开始学习seajs,模块化的js思想。SeaJS是一个遵循CommonJS规范的JavaScript模块加载框架,可以实现...与jQuery等JavaScript框架不同,SeaJS不会扩展封装语言特性,而只是实现JavaScript的模块化及按模块加载。

    sea.js模块化加载框架

    javascript模块化开发所以使用的 - seajs模块加载框架 Sea.JS 是一个遵循 CommonJS 规范的模块加载框架,可用来轻松愉悦地加载任意 JavaScript 模块。 SeaJS 支持的标准模块遵循 Modules/Wrappings 规范的 define ...

    knockout seajs .net中实战应用

    在IT行业中,Knockout和Sea.js是两个非常重要的JavaScript库,它们在Web开发中扮演着关键角色。本文将深入探讨这两个技术在.NET环境中的实际应用,并结合Ajax技术,为前端开发提供强大的支持。 首先,让我们了解下...

    SeaJS(Javascript 模块加载框架)源代码

    SeaJS 是一款强大的 JavaScript 模块加载框架,其设计灵感来源于 CommonJS 规范,旨在为前端开发者提供一种模块化开发的方式,使 JavaScript 代码更加结构化、易于管理和复用。SeaJS 的核心目标是让在浏览器环境中...

    jquery配合seajs框架实现返回顶部特效.zip

    SeaJS 是一个遵循 CommonJS 规范的前端模块加载器,它的目标是解决 JavaScript 在浏览器端的模块化问题。SeaJS 提供了一种静态依赖关系的解决方案,使得代码组织更加清晰。在这个项目中,SeaJS 可能被用来管理 ...

    seajs学习之模块的依赖加载及模块API的导出

    SeaJS 是一个遵循 CommonJS 规范的模块加载框架,它的设计目的是为了简化 JavaScript 模块的管理和加载,同时也支持 CSS 模块样式的加载。SeaJS 的核心特性包括模块定义和模块的依赖加载,这两个方面是理解 SeaJS ...

    JavaScript模块化开发之SeaJS

      SeaJS是一个遵循CommonJS规范的JavaScript模块加载框架,可以实现JavaScript的模块化开发及加载机制。使用SeaJS可以提高JavaScript代码的可读性和清晰度,解决目前JavaScript编程中普遍存在的依赖关系混乱和代码...

    seajs jquery框架实现可爱的卡通人物动画返回顶部代码

    在本文中,我们将深入探讨如何使用SeaJS和jQuery框架来实现一个可爱的卡通人物动画返回顶部的功能。这个功能在网页设计中十分常见,它为用户提供了一种便捷的方式,只需点击一个可爱的动画图标,页面就能轻松滚动回...

    JavaScript的模块化开发框架Sea.js上手指南

    Sea.js是一款遵循CMD模块定义规范的JavaScript模块化开发框架。CMD(Common Module Definition)是一种模块定义规范,与AMD(Asynchronous Module Definition)类似,但是CMD更加适合于Node.js环境,并且在浏览器端...

    seajs-flbox

    Sea.js是一款流行的JavaScript模块加载器,它遵循CommonJS规范,使得在浏览器环境中可以实现模块化开发,便于管理和组织代码。Flbox可能是这个项目中的一个组件或者功能模块,可能用于处理如图片轮播、对话框或者...

    Seajs是什么及sea.js 由来,特点以及优势

    Seajs 是一个基于浏览器的 JavaScript 模块加载框架,它旨在简化 Web 应用程序的模块化开发。Seajs 遵循 Common Module Definition (CMD) 规范,该规范是由 SeaJS 社区推广的一种模块化编程方式。CMD 的核心思想是...

Global site tag (gtag.js) - Google Analytics