5

過去数日間、Require.JSとSignalRを使用してきましたが、サイトをロードすると、require.jsの構成が正しいように見えても、jqueryの前にSignalR/Hubsがロードされているように見えることがあります。

これが私の設定です:

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

今requireは、jquery、アンダースコアなどの間違った場所を探しています...具体的にどこを探すべきかを教えていますが。おそらくこれは、v1を使用するように構成したときに古いチュートリアルに従った私と関係があります。

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

最終更新:

これが私の作業設定です。うまくいけば、私のような初心者がこの問題を通過するのに役立つでしょう。

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をロードすることが必須でした。そうしないと、Signalが見つからないことを報告します。

4

2 に答える 2

5

requirejs 2.xを使用している場合は、「shims」構成属性を使用できます。そこで、jquery、jqueryuiなどのAMDに準拠していないファイル間の依存関係を指定できます。

構成を例として使用する:

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"] 
       }
   }
});

また、「shims」で依存関係を構成すると、「order!」が使用されなくなります。プラグイン。

ヒント:「パス」を使用して、システムが使用するAPIのわかりやすい名前を設定します。そのため、そのAPIの新しいバージョンがリリースされたときに、「パス」を変更するだけで完了です。

于 2012-07-13T22:13:02.137 に答える
1

提供された回答と、jQueryを事前に含める必要がある理由をフォローアップするために...requireの構成設定は「shims」ではなく「shim」です。Requireは、構成設定の正しいスペルがないと、指定された依存関係を認識してプリロードしません。私は最近これに打たれ、それについて投稿しました:http: //mikeycooper.blogspot.com/2013/01/requirejs-20-dependencies-seemingly.html

于 2013-01-26T02:27:25.770 に答える