3

この問題はInternetExplorer9でのみ発生し、ChromeとFirefoxで正常に機能します。

これが私のすべての依存関係をロードする私のメインファイルです:

// Filename: main.js

// Require.js allows us to configure shortcut alias
// There usage will become more apparent futher along in the tutorial.
require.config({
    paths: {
        jQuery: 'libs/jquery/jquery',
        Underscore: 'libs/underscore/underscore',
        Backbone: 'libs/backbone/backbone',
        JSON: 'libs/json2/json2',
        templates: '../templates'
    }

});

require([
    // Load our app module and pass it to our definition function
    'order!app',

    // Some plugins have to be loaded in order due to there non AMD compliance
    // Because these scripts are not "modules" they do not pass any values to the definition function below
    'order!libs/jquery/jquery-min',
    'order!libs/underscore/underscore-min',
    'order!libs/backbone/backbone-min',
    'order!libs/json2/json2-src'
], function(App){
    // The "app" dependency is passed in as "App"
    // Again, the other dependencies passed in are not "AMD" therefore don't pass a parameter to this function
    App.initialize();
});

そして、ここでブラウザがクラッシュします:

SomeRoute:function(){
    facade.console.log("SomeRoute");
    $("#toDelete").remove();
    this.user =  new User($.cookies.get('User'));
    var that = this;
    require(['views/SomeView'],function(SomeView){    // On this require
        if(that.user.get('usr_id') > 0){
            var view = new SomeView();
            $("#domelement").append(that.changeView(view));
        }
        else window.location = APP_URL + "/login#login";
    });
}

このルートを取ると、次のエラーが発生します:

SCRIPT5022: Load timeout for modules: views/SomeView 
http://requirejs.org/docs/errors.html#timeout 
require.js, Line 27 Char 311

しかし、ChromeやFirefoxには何も表示されず、すべてが機能します。

編集:その上、私が求めたページを更新すると、それは完全にうまくロードされます。それは私がルートを取っているときだけです。他のモジュールコンテンツにアクセスするには、更新する必要があります。

編集2:いくつかの追加テストの後、main.jsに「enforceDefine:true」を追加しようとし、require呼び出しを変更しました。何も変わっていません。その上、この関数で呼び出されるビューは...

        confirmView: function(idDialog, view, opts1){
            facade.loader("body");
            require(["text!templates/common/dialog/confirm.phtml"], function(dialogTp){
                var opts = $.extend({}, facade.dialog.defaultOpts, opts1);
                // Delete previous dialog with same ID
                $("#"+idDialog).remove();

                // select the view we'll set
                var el = "#"+idDialog+" .modal-body";

                // Create our template with our options
                var contentDialog = _.template(dialogTp, { "option": opts, "text": "", "id": idDialog});
                $("body").append(contentDialog);

                require([view], function(viewClasse){
                    viewClasse.setElement("#"+idDialog+" .modal-body");
                    opts.preLoad(viewClasse);
                    viewClasse.render();

                    facade.unloader("body");

                    // twitter modal instance
                    facade.dialog.events(idDialog, opts, viewClasse);
                    $("#"+idDialog).modal(opts.modal);
                });
            });
        }

...同様にクラッシュします(タイムアウト)。

何が起こっているのか真剣にわかりません...

助けてくれてありがとう。

4

1 に答える 1

2

私は以前にこの問題を抱えていましたがorder、スクリプトではなく通常のモジュールで使用しようとしたことが原因でした。古い1.0.xドキュメントから:

注文プラグインは、従来のスクリプトで使用するのが最適です。define()を使用してモジュールを定義するスクリプトには必要ありません。「オーダー!」をミックスしてマッチさせることが可能です。通常の依存関係を持つ依存関係ですが、「順序」のみです。1つは相互に相対的な順序で評価されます。

http://requirejs.org/docs/1.0/docs/api.html#order

いずれの場合も、構成を優先shimして注文プラグインを廃止するRequireJS2.0を使用する必要があります。

于 2012-07-26T13:10:32.800 に答える