首页 > 关于seajs引用的问题

关于seajs引用的问题

http://www.zjwen.com/
这里面的jquery没有引入成功,导致$无法解释,seach.js和bootstrap.js集体报错。
我是用seajs整合引用的,我在目录下查看,引用成功,而且顺序也是对的。
用bower重装一遍jquery和jquery-ui也没有用,这是什么原因?


你在使用seajs.use 时,这几个js是同时请求的,并没有按顺序执行,所以你就无法保证,每次bootstrap是在执行完jquery文件之后。修改意见,一种是把 bootstrap这种依赖别的库的,用回调的方式执行。

seajs.use(['jquery','avalon'],function(){
    seajs.use(['jquery.ui','bootstrap','search','blog'];
})

或者使用 seajs的预加载功能,加载全局的js文件。在seajs config文件中添加:

preload: [
        window.jQuery ? '' : 'jquery'
    ]

jquery 默认支持cmd规范

if ( typeof define === "function" && define.cmd ) {
    define( "jquery", [], function() {
        return jQuery;
    });
}

改成amd

if ( typeof define === "function" && define.amd ) {
    define( "jquery", [], function() {
        return jQuery;
    });
}

因为bootstrap对jquery是有依赖关系的,bs必须在jquery之后加载。因此需要用如下语句把bs代码包起来,这样就可以保证bs在jquery之后初始化。

define(function (require, exports, module) {
    require('jquery');
    //原来的代码
});

补充一下。不建议楼下的写法。楼下的写法属于原生js的思路,不符合sea的理念。sea的理念是不指定加载顺序,而是指定依赖关系,sea会分析各模块之间的依赖关系,来制定加载顺序,保证正确加载,同时不会出现重复加载。
手动指定顺序无疑是放弃了sea最关键的依赖机制,那又何必引入sea……

【热门文章】
【热门文章】