2012-07-13 6 views
5

私はここ数日でRequire.JSとSignalRを使って作業していました。私のサイトをロードすると、require.js設定が表示されても、SignalR/Hubsがjqueryの前にロードされることがあるようです正しいこと。ここでRequire.js + SignalR

は私の設定です:

require.config({ 
    paths: { 
     jQuery: 'libs/jquery/jquery', 
     Underscore: 'libs/underscore/underscore', 
     Backbone: 'libs/backbone/backbone', 
     Marionette: 'libs/backbone/backbone.marionette' 
    } 
}); 

require([ 
     'app', 
     'order!libs/jquery/jquery-min', 
     'order!libs/jQueryUI/jquery-ui-1.8.11.min', 
     'order!libs/jqGrid/grid.locale-en', 
     'order!libs/jqGrid/jquery.jqGrid.min', 
     'order!libs/underscore/underscore-min', 
     'order!libs/backbone/backbone-min', 
     'order!Marionette', 
     'order!libs/jquery.signalR-0.5.1', 
     'order!noext!signalr/hubs' 
    ], function (app) { 
     app.initialize();   
    }); 

これは私がハブファイルの行16にエラーを取得します失敗した場合。それはuncaught TypeError: Cannot read property 'signalR' of undefinedと言います。

V2にアップグレードし、自分の設定を変更しました。

var fRequire = require.config({ 
    paths: { 
     jQuery: 'libs/jquery/jquery', 
     Underscore: 'libs/underscore/underscore', 
     Backbone: 'libs/backbone/backbone', 
     Marionette: 'libs/backbone/backbone.marionette', 
     sigr: 'libs/jquery.signalR-0.5.1' 
    }, 
    shims: {   
     "libs/jquery.signalR-0.5.1": { 
      deps: ["jQuery"] 
     }, 
     "libs/jqGrid/jquery.jqGrid.min": { 
      deps: ["jQuery"] 
     }, 
     "libs/jquery/jquery-ui-1.8.19.min": { 
      deps: ["jQuery"] 
     }, 
     "libs/jqGrid/grid.locale-en": { 
      deps: ["jQuery"] 
     }, 
     "noext!signalr/hubs": { 
      deps: ["sigr"] 
     } 
    } 
}); 

fRequire([ 
    'app' 
], function (app) { 
    app.initialize(); 
}); 

は、今私はどこを見れに特異的にそれを伝えるにもかかわらず...など、アンダースコア、jqueryのための間違った場所で探している必要があります。おそらくこれは、私がv1を使用するように設定したときの古いチュートリアルの後に私と関係があります。

http://backbonetutorials.com/organizing-backbone-using-modules/

FINAL UPDATE:

は、ここに私の作業configです。うまくいけば、自分のような初心者がこの問題に合格するのを助けるだろう。

require.config({ 
    baseUrl: '/js', 
    paths: { 
     "jquery": 'libs/jquery/jquery-min', 
     "underscore": 'libs/underscore/underscore-min', 
     "backbone": 'libs/backbone/backbone-min', 
     "marionette": 'libs/backbone/backbone.marionette', 
     "sigr": 'libs/jquery.signalR-0.5.1' 
    }, 
    shims: { 
     "backbone": { 
      deps: ["underscore", "jquery"], 
      exports: "Backbone" 
     }, 
     "underscore": { 
      deps: ["jquery"] 
     }, 
     "marionette": { 
      deps: ["backbone", "jquery"] 
     }, 
     "sigr": { 
      deps: ["jquery"] 
     }, 
     "libs/jqGrid/jquery.jqGrid.min": { 
      deps: ["jquery"] 
     }, 
     "libs/jquery/jquery-ui-1.8.19.min": { 
      deps: ["jquery"] 
     }, 
     "libs/jqGrid/grid.locale-en": { 
      deps: ["jquery"] 
     }, 
     "noext!signalr/hubs": { 
      deps: ["sigr"] 
     } 
    } 
}); 

// for future ref, I loaded jquery here because app.js references sigr which requires it. 
// without enabling it before the module is loaded sigr would complain jquery was not enabled. 
require([ 
    'libs/domReady', 
    'app', 
    'jquery' 
], function (domReady, app, $) { 
    domReady(function() { 
     app.initialize(); 
    }); 
}); 

関数(domready、app、$)でjqueryをロードする必要がありました。そうしないとシグナルが見つからないことが報告されます。

答えて

4

requirejs 2.xを使用している場合は、 "shims"設定属性を使用できます。なくなり「シム」に依存関係を設定し、

require.config({ 
    paths: { 
     jQuery: 'libs/jquery/jquery', 
     Underscore: 'libs/underscore/underscore', 
     Backbone: 'libs/backbone/backbone', 
     Marionette: 'libs/backbone/backbone.marionette' 
    }, 
    // specify depedencies 
    shim: { 
     "libs/jquery.signalR-0.5.1" : { 
      deps: ["jQuery"] 
     }, 
     "libs/jqGrid/jquery.jqGrid.min" : { 
      deps: ["jQuery"] 
     } 
    } 
}); 
また

:そこには、一例として、コンフィギュレーションを使用して...などjqueryの、jqueryui、同様に、

をAMDの準拠していないファイル間の依存関係を指定することができます「注文!」の使用プラグイン。

ヒント:システムで使用するapisのフレンドリ名を設定するには「パス」を使用します。そのため、新しいバージョンのapiがリリースされたときに「パス」を変更するだけで済みます。

+0

"shim"の代わりに "shim"と言うべきです。 – Sean

1

答えをフォローアップして、なぜjQueryをあらかじめ組み込む必要があるのか​​... requireの設定は "shim"ではなく "shim"です。 Requireは、設定のスペルを間違えずに指定した依存関係を認識してプリロードしません。私は最近このことを打ちのめされ、それについて投稿しました:http://mikeycooper.blogspot.com/2013/01/requirejs-20-dependencies-seemingly.html

+0

これは重要な情報でした。私もシムではなくシムを使って噛まれました。これに注意を喚起してくれてありがとう! –