【发布时间】:2014-07-22 21:46:31
【问题描述】:
我正在开发一个结合了 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...
}
(如您所见,jqm 仅在 ember 应用程序就绪时才加载)
这很好用,但是当我将所有文件构建到一个缩小的 js 文件中时,我遇到了这个问题:只要代码需要 JQM,我就会在网络选项卡上看到一个 http 调用,它会抓取 jquery- mobile.js
当然,这是一个不愉快的过程。我能想到的唯一解决方案是加载 JQM 以及所有其他依赖项,但不执行它。然后,代码可以执行 JQM 而不是需要文件。
但是,我没有使用 require.js 的经验,也不知道该怎么做。任何帮助表示赞赏。其他方法来完成同样的事情也值得赞赏
谢谢
编辑: 为什么 JQM 需要在 Ember 之后加载? 因为 JQM 在 DOM 上添加了影响 ember 的包装器、类和事件......事情变得非常糟糕
【问题讨论】:
-
我不知道 Ember - 您能否解释一下为什么在 Ember 初始化之前无法加载 jQuery Mobile 脚本(如 jQuery 脚本)?也许可以避免这种需要。如果做不到这一点,则需要将 jQuery Mobile 脚本缩小到与 Ember 脚本被缩小到的不同的脚本中,以便可以在不同的时间点单独加载。
-
感谢您的回复,我编辑了帖子以回答您的问题
-
谢谢。并检查我是否理解问题:这里的根本问题是,当所有脚本都被缩小时,移动脚本脚本与 ember 脚本一起缩小,因此它们都同时加载并且没有机会绑定
mobileinit加载移动脚本之前的事件处理程序。这就是您要解决的问题吗? -
听起来不错。
-
这又引出了一个问题:你是如何进行缩小的——你使用的是什么缩小工具?你能控制你正在使用的任何缩小工具,以便将脚本缩小并按特定顺序输出吗?
标签: javascript jquery jquery-mobile ember.js requirejs