Javascript Require.js:从内部版本加载文件,但不';我不能执行它

Javascript Require.js:从内部版本加载文件,但不';我不能执行它,javascript,jquery,jquery-mobile,ember.js,requirejs,Javascript,Jquery,Jquery Mobile,Ember.js,Requirejs,我正在开发一个结合了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.mi

我正在开发一个结合了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需要在余烬之后加载?
因为JQM在DOM上添加了影响ember的包装器、类和事件。。。事情变得非常糟糕

经过一番努力,我找到了问题的答案:

    ...

    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
    },
});

这并不是我所需要的,但其他人可能会找到帮助

我不知道Ember-您能否澄清为什么在初始化Ember之前无法加载jQuery移动脚本(如jQuery脚本)?也许这种需要可以避免。如果做不到这一点,jQuery移动脚本将需要缩小到与Ember脚本缩小到的不同的脚本,以便可以在不同的时间点单独加载。感谢您的回复,我编辑了这篇文章来回答您的问题谢谢。检查一下,我理解了这个问题:这里的基本问题是,当所有脚本都缩小时,移动脚本与余烬脚本一起缩小,因此它们都同时加载,并且在加载移动脚本之前没有机会绑定
mobileinit
事件处理程序。这就是你想要解决的问题吗?听起来不错。这又引出了一个问题:你是如何进行缩小的?你使用的是什么缩小工具?您能否控制正在使用的任何缩小工具,以便脚本按特定顺序缩小和输出?