精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-01-14
最后修改:2012-01-14
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了 })只需要定义控件所需要的模块即可
由于是刚出炉的,很多地方还很不规范,以后会慢慢完善~ 下一帖再讲具体的实现原理和目前所存在的问题~ 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-01-14
最后修改:2012-01-14
实现原理:
这里只说原理不分析代码
步骤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里的顺序去执行即可。
|
|
返回顶楼 | |
发表时间:2012-01-14
最后修改:2012-01-14
这个功能是昨天刚完成的,所以很毛糙,有兴趣的朋友可以直接看看代码,里面注释写的还比较详细
但是目前使用的YUI的MAP机制实在太SB,等完善后 会像SEAJS学习,使用它的那套机制来改进~~~ |
|
返回顶楼 | |
发表时间:2012-01-17
我也简单地用了下require异步加载的应用
http://www.6yang.net |
|
返回顶楼 | |
发表时间:2012-01-20
module loader还是遵循CommonJS规范比较好,不要随随便便就来个defined函数
|
|
返回顶楼 | |
发表时间:2012-01-20
最后修改:2012-01-20
以前一直想实现这种语法调用的加载器, 可惜这样难以(跨域的情况下几乎没办法)实现依赖管理
require('xxx'); require('xxxx'); code; |
|
返回顶楼 | |
发表时间:2012-01-20
最后修改:2012-01-20
如果是企业级的模块化管理,应该还要考虑各项目间如何共用组件?也就是如何统一管理与引用的问题。也就是要考虑到楼上说的跨域问题,或自动部署等问题
|
|
返回顶楼 | |
浏览 3432 次