我有一个使用jquery,jquery mobile和requireJS(2.0)的工作项目。现在我遇到了将jquery.mobile.iscrollview集成到requireJS世界的问题。
我的requirejs配置如下所示:
(function (require) {
"use strict";
require.config({
paths:{
'angular':'../external-libs/angular-1.0.3',
'jquery':'../external-libs/jquery-1.7.2',
'jquery.mobile':'../external-libs/jquery.mobile-1.2.0',
'adapter': '../external-libs/jquery-mobile-angular-adapter-1.2.0',
'moment': '../external-libs/moment-1.6.2.min',
'iscroll': '../external-libs/iscroll',
'iscrollview': '../external-libs/jquery.mobile.iscrollview'
},
shim:{
'angular':{ deps:['jquery'], exports:'angular' },
'iscroll':{ deps:['jquery'], exports:'iscroll' },
'iscrollview':{ deps:['jquery.mobile', 'iscroll'], exports:'iscrollview' }
}
});
require([
"jquery",
"jquery.mobile",
"adapter",
"moment",
"iscroll",
"iscrollview",
"myApp"
], function () {
//
});
}(require));
这很有效,只要requireJS优化器没有运行生产模式,只有一个大的JS文件应该提供给客户端。即使将优化器设置为不优化任何内容(优化:无),因此它只能将所有js文件合并在一起,但它无法正常工作。
加载网站时出现错误消息
未捕获的TypeError:无法读取属性'ignoreContentEnabled'的 未定义
它发生在文件“jquery.mobile.iscrollview.js”中,从代码中可以明显看出,在解析文件时$ .mobile对象尚未可用,因为只有在jquery准备好之后才会创建事件(我认为)。
知道怎么解决这个问题吗?
谢谢!
马
答案 0 :(得分:2)
现在通过将jquery.mobile.iscrollview转换为AMD模块来自行解决。像这样:
define(function () {
function iScrollView($) {
//here comes the iscrollview code, but without event handler to pagecreate
}
jQuery(document).bind("pagecreate", function (e) {
"use strict";
iScrollView(jQuery); //this is doing the init stuff that normally happens
//when script is loaded, lines after this are the
//original event handler
var elements = jQuery(e.target).find(":jqmData(iscroll)");
elements.iscrollview();
});
return iScrollView;
});
答案 1 :(得分:0)
这里的问题是加载与运行jQuery核心的时间。 (这就是为什么我个人更喜欢CurlJS。从来没有时间问题)
但是,如果配置系统的严格性让你失望,请掌握控制并明确声明命令:
require.config({
paths:{
'angular':'../external-libs/angular-1.0.3',
'jquery':'../external-libs/jquery-1.7.2',
'jquery.mobile':'../external-libs/jquery.mobile-1.2.0',
'adapter': '../external-libs/jquery-mobile-angular-adapter-1.2.0',
'moment': '../external-libs/moment-1.6.2.min',
'iscroll': '../external-libs/iscroll',
'iscrollview': '../external-libs/jquery.mobile.iscrollview'
}
});
require(["jquery"], function($){
require(["angular", "jquery.mobile"], function(angular){
require(["adapter","iscroll"], function(){
require(["myApp","moment","iscrollview"], function(myApp){
// do something with
myApp, $, angular
})
})
})
})
我不知道'时刻'是的,所以把它放在最后,因为,根据你的垫片结构,它不依赖于任何东西。