我正在开发一个结合了ember.js和jquery-mobile.js的应用程序
为了使这两者相互配合,我需要在初始化Ember之后加载JQM。所以我在我的主文件app.js中使用以下代码:
require.config({
baseUrl: 'resources/js/',
waitSeconds: 200,
paths: {
text: 'lib/require/text',
ember: 'lib/ember-1.5.1.min',
jquery: 'lib/jquery-2.1.1.min',
mobile: 'lib/jquery.mobile-1.4.2.min',
handlebars: 'lib/handlebars-1.3.0.min',
},
shim: {
'ember': {
deps: ['handlebars', 'text', 'jquery']
}
}
});
define('app', [
'jquery',
'app/many/files',
'ember'
], function($,
ManyFiles) {
$(document).bind('mobileinit', function() {
$.mobile.ajaxEnabled = false;
$.mobile.pushStateEnabled = false;
$.mobile.linkBindingEnabled = false;
$.mobile.hashListeningEnabled = false;
$.mobile.ignoreContentEnabled = true;
});
App = Ember.Application.create({
ready: function() {
require(['mobile']);
}
});
// Initialize stuff...
}
(如您所见,只有当ember应用程序准备就绪时才加载jqm)
这很好用,但是当我将所有文件构建到一个缩小的js文件中时,我遇到了这个问题:一旦代码需要JQM,我就会在网络选项卡上看到一个http调用,它会抓住jquery- mobile.js
当然这是一个令人不快的过程。我能想到的唯一解决方案是加载JQM以及所有其他依赖项但不执行它。然后,代码可以执行JQM而不需要文件。
但是我对require.js没有经验,我不知道如何做到这一点。任何帮助表示赞赏。其他方法也可以完成同样的事情
由于
修改 为什么JQM需要在Ember之后加载? 因为JQM在DOM上添加了干扰ember的包装器,类和事件......而且事情变得非常糟糕
答案 0 :(得分:0)
经过大量的讨论,我找到了问题的答案:
...
App = Ember.Application.create({
ready: emberInit
});
// Initialize stuff
}
function emberInit() {
require(['mobile']);
}
似乎require语句过于嵌套而无法正常工作(可能是一个bug?)
注意:强> 在试图找到我的问题的答案时,我发现了一个require.js的功能,我想与可能有类似问题的人分享并碰到这个帖子:
显然你可以在require参数上设置一个回调,以便在加载所有依赖项时运行,如:
require.config({
deps: ['jquery', 'handlebars', 'ember', 'socketio'],
callback: function () {
// Do stuff when above dependencies load
},
});
这不是我所需要的,但其他人可能会发现有用的