seajs初尝 加载jquery返回null解决学习日志含示例下载
原文地址:http://www.tuicool.com/articles/bmuaEb
如需demo示例,请点击下方链接下载:
http://yunpan.cn/cVEybKs8nV7CF 提取码 2164
今天早上初尝seajs,发现一个非常蛋疼的事情,使用官方demo中的jquery是没有问题,
下载官方最新版jquery 2.1.1发现console.log($)返回null,百思不得其解!只能求助度娘!
在GitHub发现了玉伯的说明 《 直接调用 jQuery 插件等非标准模块的方法 》
不过这方法在2.3版本貌似已经不行,seajs.modify方法已在这版本移除!
https://github.com/seajs/seajs/issues/286
这里的标准模块指的是AMD和CMD的定义
引用玉伯在知乎的详细回答
http://www.zhihu.com/question/20351507/answer/14859415
以下引用玉伯的回复大家会更加深入了解
@lifesinger 昨天折腾得太累了,不好意思。后来还是用 RequireJs 解决问题。
另外,我想问问:
1. AMD 是不是容易卡死UI?
2. 为什么采用与 SeaJs同样采用 CMD 规范编写的 NodeJs 模块 不能直接调用——我大概观察了下,好像定义格式不太一样,这也是问题啊,既然遵循同样的规范为什么格式又不一样,
3. 用常规全局变量写法写的脚本经过 shim 配置,在 var ejs = require('ejs') 后会覆盖 ejs 的(全局)定义,但是可以直接 require('ejs'),然后 ejs 会注册到window 名下。
4. 把一个常规脚本,换成 SeaJs 标准格式 跟 RequireJs 转换有什么不同吗?
另另外,感觉RequireJS 的自动加载插件机制挺不错。
@iahu
AMD 是一加载就执行,当一次加载很多文件时,意味着会立刻执行大量脚本,这时可能会导致 UI 卡。CMD 的执行是分散的,因此一般来说不会造成 UI 卡。
SeaJS 与 Node.js 的关系,可参考这篇文档:#275
shim 配置后,require('ejs') 得到的 ejs 就是全局那个 ejs,也可以将挂载在 window 上的 ejs 去掉,比如
seajs.config({
plugins: ["shim"],
alias: {
src: 'path/to/ejs.js',
exports: function() { var ejs = window.ejs; window.ejs = undefined; return ejs }
}})
RequireJS 的 shim 插件,本质上和 SeaJS 是一样的。
以上提到的方法已过时了,只好继续尝试其他办法!
方法一:
还是玉伯老大的办法《seajs 2.1.1中去掉了seajs.modify 后,如何preload CDN 中的jquery ?》
https://github.com/seajs/seajs/issues/862
整个文章主要是说不修改为CMD模式下在模块内部使用jquery,玉伯老大是不推介这样,但还是可以实现
不过jquery文件就不是在seajs.config里配置了,是直接在head头部引入文件,就像平时那样,然后在seajs内部某个事件机制触发将全局的jQuery对象带到内部module.exports对象;
seajs.on('exec', function(module) {
if (module.uri === seajs.resolve('jquery')) {
window.$ = window.jQuery = module.exports;
}
});
方法二:
当然就是按照CMD定义做封装一次jquery,方法也很简单,只要把源代码粘进去,然后返回jquery对象即可;
define(function(){
//jquery源代码
return $.noConflict();
});
这样就可以在seajs.config引入文件在内部其他模块使用,这里返回为什么是$.noConflict(),请看w3c学校介绍
http://www.w3school.com.cn/jquery/core_noconflict.asp
seajs.config({
base : "../sea-modules/",
alias : {
"jquery" : "jquery.js"
}
});
define(function(require, exports, module){
var $ = require("jquery");
exports.showObj = function() {
console.log($);
}
});
方法三:
参照seajs官方jquery封装方法
if ( typeof module === "object" && module && typeof module.exports === "object" ) {
module.exports = jQuery;} else {
if ( typeof define === "function" && define ) {
define( "jquery", [], function () { return jQuery; } );
}}if ( typeof window === "object" && typeof window.document === "object" ) {
window.jQuery = window.$ = jQuery;}
https://github.com/seajs/examples
在目录 sea-modules/jquery 里就有封装好的1.10版本;
https://github.com/seajs/seajs/issues/264
seajs初尝 加载jquery返回null解决学习日志含示例下载的更多相关文章
- 使用SeaJS,require加载Jquery的时候总是为null
这个问题困扰了我两天,使用别人的例子.官网down下来的example都没有问题.但是放到自己项目里就 var $=require("jquery") 为null. 后来发现,jq ...
- seajs加载jquery时提示$ is not a function该怎么解决
这篇文章主要介绍了seajs加载jquery时提示$ is not a function该怎么解决的相关资料,需要的朋友可以参考下 jquery1.7以上的都支持模块化加载,只是jquery默认的是支 ...
- seajs加载jquery提示$ is not a function
jquery1.7以上的都支持模块化加载,只是jquery默认的是支持amd,不支持cmd.所以要用seajs加载jquery,需要稍微改下jquery 把 if (typeof define === ...
- 谈谈动态地加载Jquery库文件的方法
有时候,我们可能不会在网页中<script src="jquery.min.js" 来加载 Jquery 库,可能在用户点击某个按钮后,才去加载 Jquery 库. 好处不用 ...
- selenium 加载jquery
packagecom.example.tests; import staticorg.junit.Assert.*; importjava.util.*; importorg.junit.*; imp ...
- 从excel表格加载数据返回DataSet
添加命名空间:using System.Data.OleDb; /// <summary> /// 从excel表格加载数据返回DataSet /// </summary> / ...
- 测试加载jquery
Hello world! <h1 id="main-heading">Hello world!</h1> <p><img onclick= ...
- 优化加载jQuery的方法
请看下面的一段代码: <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js" ...
- 加载jquery插件注意了
1.尽量放在</body>之前,不要放在</head>标签之前,如果执意要放也要放在css之后,例如: <link href="style.css" ...
随机推荐
- Linux 数据 CD 刻录
http://www.cyberciti.biz/tips/linux-burning-multi-session-cds-on-linux.html #mkisofs -dvd-video -inp ...
- java多线层同时运行的解决,同步代码块synchronized
/* 多个线层同时操作一个数据 会导制数据超出 同步代码块 synchronized(对像) { 需要同步的代码 } */ class Do7 { public static void main(St ...
- 8 个实用的 Linux netcat 命令示例
Netcat 或者叫 nc 是 Linux 下的一个用于调试和检查网络工具包.可用于创建 TCP/IP 连接,最大的用途就是用来处理 TCP/UDP 套接字. 这里我们将通过一些实例来学习 netca ...
- hdu5362 Just A String(dp)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Just A String Time Limit: 2000/1000 MS (J ...
- Spring 学习笔记02
用spring实现一个论坛基本功能 1 运行环境 Linux:Ubun 14.04 64bit IDE:IntelliJ IDEA 14.03 JDK:1.7.40 MySQL:5.5.44 Tomc ...
- Intellij idea配置springMvc4.2.6
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面. 环境: Intellij iead 2016.1 java version " ...
- 对于js原型和原型链继承的简单理解(第二种,对象冒充)
关键代码 this.parent = Cat; this.parent.apply(this); function Cat(){ this.climb = function(){ aler ...
- ORACLE主要的系统表和系统视图
ORACLE主要的系统表和系统视图 1.系统表 ORACLE数据库的系统参数都存储在数据库中,可以通过SQLPLUS,以用户SYS进行查询.几个重要的表或者视图如下: v$controlfile:控制 ...
- Python 一路走来 DOM & Jquery
DOM 查找: 直接查找 间接查找 —getElementById ...
- Codeblocks 添加库(undefined reference 错误的处理)
静态库 (扩展名为 .a 或 .lib) 是包含函数的文件,用于在link阶段整合执行程序,动态链接库(扩展名 .dll)是不在link阶段整合进执行程序中的. DLL文件在执行阶段动态调用 下面 ...