seajs中define方法的id和dependencies参数

这篇其实算是补充上一篇。

事记:

昨天一同事(之前没用过seajs)突然要用seajs,我无意间听到,加上我最近又在研究它,便“自不量力”地跑上去跃跃欲试。

看到他已经敲出来的那些看似有点像的seajs代码,跟我之前的用法不尽相同,我就犯迷糊了。然后回来又自行研究了一下,才大概搞明白了怎么回事,也算帮同事搞定了seajs的引进。

下面进入正题:

我之前的用法是

html:

1 <script type="text/javascript" src="xx/js/sea.js" id="seajsnode" data-main="mymod"></script>//data-main指定入口文件

mymod.js

1 define(function (require) {
2   //require('xxx')//引入别的模块
3   //业务代码  
4 }

基本没有使用seajs.use方法

今天总结了一下seajs.use的使用

首先:页面上还是引入seajs

1 <script type="text/javascript" src="xx/js/sea.js" id="seajsnode" ></script>

然后下面紧跟着调用seajs.use

1 <script>
2  seajs.use([ 'seajs/jquery','seajs/tagcloud', 'seajs/imgAlter'], function ($, b, c) {
3         var v = $.browser.version;
4         //debugger;
5     });
6 </script>

第一个参数,即那个数组,是依赖的模块,各个模块的输出接口按顺序跟后面的callback形参一一对应。

依赖模块加载完毕后,执行callback。

其实上面的内容很多教程里都有。

但这里不得不提的是,如果这里的依赖模块里如果指定了id,比如

define('gallery/jquery/1.7.2/jquery',[],function (require) {
    //jquery code
}

而这个id跟模块路径又不一致,会导致无法获取输出接口

经浏览器查看,引用依赖的jquery的路径是正确的,并且也的确加载到jquery模块了,但输出接口始终为null。

后来google到,开发阶段不推荐define的参数传入三个,只需给定后面的factory即可,发布时通过构建工具提取压缩模块,会自动加上idhe依赖数组(即第二个参数),这样seajs能够更快的定位本身这个模块和它依赖的模块。

顺便提一下,第二个参数,如果显示传入了,那么seajs就不会再通过正则去扫描factory.toString(),直接根据这个参数去加载依赖模块,如果为[]即表示无依赖。

posted on 2013-04-27 09:53  雲石  阅读(1542)  评论(0编辑  收藏  举报