`
zhumq1982
  • 浏览: 9417 次
  • 性别: 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 模块加载框架) v1.0.2.zip

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

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

    CommonJS是一个为服务器端JavaScript设计的一套API,但SeaJS将其应用到了浏览器环境,使得前端开发也能享受到模块化的便利。在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 可能被用来管理 ...

    JavaScript模块化开发之SeaJS

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

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

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

    seajs-flbox

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

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

    Seajs,一个Web模块加载框架,追求简单、自然的代码书写和组织方式,:Sea.js 遵循 CMD 规范,模块化JS代码。依赖的自动加载、配置的简洁清晰,可以让程序员更多地专注编码。   2.Seajs优缺点   优点: 1).提高可...

    SeaJS入门教程系列之SeaJS介绍(一)

    与jQuery等JavaScript框架不同,SeaJS不会扩展封装语言特性,而只是实现JavaScript的模块化及按模块加载。SeaJS的主要目的是令JavaScript开发模块化并可以轻松愉悦进行加载,将前端工程师从繁重的JavaScript文件及...

    Bootstrap和seajs结合的分页器

    Bootstrap 是一个流行的前端开发框架,提供了丰富的 UI 组件,如按钮、表单、网格系统等,而 SeaJS 是一个用于浏览器端的模块加载器,它使得 JavaScript 的组织和维护变得更加有序。 Bootstrap 的分页器组件提供了...

Global site tag (gtag.js) - Google Analytics