Require.js + SignalR

Я работал с Require.JS и SignalR в течение последних нескольких дней и заметил, что когда я загружаю свой сайт, иногда кажется, что SignalR/Hubs загружаются раньше, чем jquery, несмотря на то, что моя конфигурация require.js кажется правильной.

Вот мой конфиг:

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

В обязательном порядке я загружал jquery в функцию (domready, app, $). В противном случае сигнализатор сообщит, что его невозможно найти.

5
задан coreyperkins 15 July 2012 в 03:35
поделиться