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是一个遵循CommonJS规范的JavaScript模块加载框架,可以实现JavaScript的模块化开发及加载机制。
CommonJS是一个为服务器端JavaScript设计的一套API,但SeaJS将其应用到了浏览器环境,使得前端开发也能享受到模块化的便利。在SeaJS中,开发者可以定义、依赖和执行模块,从而将复杂的项目分解为小而独立的组件,每...
SeaJS 正是这样一个工具,它遵循了 CommonJS 规范,允许开发者在浏览器环境中实现类似服务器端 Node.js 的模块化开发体验。 CommonJS 是一套定义了模块规范的接口标准,主要应用于服务器端编程,但 SeaJS 将这一...
SeaJS 是一款强大的JavaScript模块加载框架,其设计目标是遵循CommonJS规范,为开发者提供一个在浏览器环境中组织和管理代码的高效工具。CommonJS规范旨在促进JavaScript模块化,使得代码可复用性和可维护性得到显著...
总结来说,SeaJS作为一个前端模块加载器,为JavaScript提供了CommonJS风格的模块化机制,帮助开发者更好地组织代码,提高代码复用性和可维护性。通过学习和应用SeaJS,开发者可以在浏览器环境中享受到类似于服务器端...
Seajs 是一个用于浏览器端的模块加载器,它遵循 CommonJS 规范,让 JavaScript 开发者能够在浏览器环境中实现模块化开发,提高代码的可维护性和复用性。Seajs 的核心理念是通过模块化解决 JavaScript 开发中的依赖...
Seajs-2.2.3 是一个开源的 JavaScript 模块加载器,旨在为开发者提供简单、极致的模块化开发体验。它强调的是简洁、自然的代码书写和组织方式,使得项目管理和协同工作变得更加高效。Seajs 在JavaScript社区中扮演着...
Seajs是一款轻量级的JavaScript模块加载器,它遵循CommonJS规范,旨在解决浏览器环境中的模块化问题。在深入理解seajs源代码之前,我们首先需要了解模块化的基本概念和CommonJS规范。 模块化是软件开发中的一种组织...
开始学习seajs,模块化的js思想。SeaJS是一个遵循CommonJS规范的JavaScript模块加载框架,可以实现...与jQuery等JavaScript框架不同,SeaJS不会扩展封装语言特性,而只是实现JavaScript的模块化及按模块加载。
javascript模块化开发所以使用的 - seajs模块加载框架 Sea.JS 是一个遵循 CommonJS 规范的模块加载框架,可用来轻松愉悦地加载任意 JavaScript 模块。 SeaJS 支持的标准模块遵循 Modules/Wrappings 规范的 define ...
在IT行业中,Knockout和Sea.js是两个非常重要的JavaScript库,它们在Web开发中扮演着关键角色。本文将深入探讨这两个技术在.NET环境中的实际应用,并结合Ajax技术,为前端开发提供强大的支持。 首先,让我们了解下...
SeaJS 是一款强大的 JavaScript 模块加载框架,其设计灵感来源于 CommonJS 规范,旨在为前端开发者提供一种模块化开发的方式,使 JavaScript 代码更加结构化、易于管理和复用。SeaJS 的核心目标是让在浏览器环境中...
SeaJS 是一个遵循 CommonJS 规范的前端模块加载器,它的目标是解决 JavaScript 在浏览器端的模块化问题。SeaJS 提供了一种静态依赖关系的解决方案,使得代码组织更加清晰。在这个项目中,SeaJS 可能被用来管理 ...
SeaJS 是一个遵循 CommonJS 规范的模块加载框架,它的设计目的是为了简化 JavaScript 模块的管理和加载,同时也支持 CSS 模块样式的加载。SeaJS 的核心特性包括模块定义和模块的依赖加载,这两个方面是理解 SeaJS ...
SeaJS是一个遵循CommonJS规范的JavaScript模块加载框架,可以实现JavaScript的模块化开发及加载机制。使用SeaJS可以提高JavaScript代码的可读性和清晰度,解决目前JavaScript编程中普遍存在的依赖关系混乱和代码...
在本文中,我们将深入探讨如何使用SeaJS和jQuery框架来实现一个可爱的卡通人物动画返回顶部的功能。这个功能在网页设计中十分常见,它为用户提供了一种便捷的方式,只需点击一个可爱的动画图标,页面就能轻松滚动回...
Sea.js是一款遵循CMD模块定义规范的JavaScript模块化开发框架。CMD(Common Module Definition)是一种模块定义规范,与AMD(Asynchronous Module Definition)类似,但是CMD更加适合于Node.js环境,并且在浏览器端...
Sea.js是一款流行的JavaScript模块加载器,它遵循CommonJS规范,使得在浏览器环境中可以实现模块化开发,便于管理和组织代码。Flbox可能是这个项目中的一个组件或者功能模块,可能用于处理如图片轮播、对话框或者...
Seajs 是一个基于浏览器的 JavaScript 模块加载框架,它旨在简化 Web 应用程序的模块化开发。Seajs 遵循 Common Module Definition (CMD) 规范,该规范是由 SeaJS 社区推广的一种模块化编程方式。CMD 的核心思想是...