Require.js与jQueryMobile-路由器
问题描述:
我加载require.js用jQuery包括像这样我的html:Require.js与jQueryMobile-路由器
<script data-main="requires" src="lib/require-jquery.js"></script>
我requires.js的内容:
require.config({
paths: {
"jquery.mobile": "lib/jquery.mobile",
"jquery.mobile.router": "lib/jquery.mobile.router"
},
shim: {
"jquery.mobile" : {
"exports": "$.mobile"
},
"jquery.mobile.router": {
"deps": [ "jquery.mobile" ],
"exports": "$.mobile.Router"
}
}
});
require(["jquery.mobile.router" ], function() {
require(["router"]);
});
而且在我的路由器.js文件我创建了jquery mobile router plugin的新实例:
router = new $.mobile.Router(...);
这给了我这个错误:
Uncaught TypeError: undefined is not a function
当我输出$和$ .mobile时,它们都被定义了,只是$ .mobile.Router是未定义的。
我在这里做了什么错?
答
我的问题是,我加入jquery.mobile作为jquery.mobile.router依赖性,从而jQuery的移动将首先被加载,其中作为用于路由器状态的文档这样的:
The jQuery Mobile router javascript file must be loaded before jQuery Mobile.
这是我如何改变了我的requires.js来解决这个问题:
require.config({
paths: {
"jquery.mobile": "lib/jquery.mobile",
"jquery.mobile.router": "lib/jquery.mobile.router"
},
shim: {
"router": {
"deps" : ["jquery.mobile"]
},
"jquery.mobile" : {
"deps" : [ "jquery.mobile.router"],
"exports": "$.mobile"
},
"jquery.mobile.router": {
"exports": "$.mobile.Router"
}
}
});
require(["router"]);
现在我只需要我的router.js和负载jquery.mobile和jquery.mobile.router的依赖关系。加载顺序现在是这样的:
- jquery.mobile.router
- jquery.mobile
- 路由器
答
在router.js
文件试试这个: -
define(["jquery", "jquery.mobile.router"], function($) {
// your js code in router.js
});
通过在您的定义呼叫指定jquery
和$
作为参数传递,jQuery对象$
和jquery.mobile.router
定义的相关功能现在在提供您的代码范围(包含在文件router.js
中)。