2015-01-31 3 views
0

Я хочу создать приложение Backbone.js с Require.js. Но у меня есть ошибка в консоли: Ошибка с нечистотой: имя модуля «underscore» еще не загружено для контекста: _. Использование требуют ([])Backbone.js и Require.js

require.config({ 
     baseUrl: 'js/', 
     paths : { 
      'jquery' : 'jquery', 
      'underscore' : 'underscore', 
      'backbone' : 'backbone', 
      shim: { 
       'underscore': { 
        exports: '_' 
       }, 
       'backbone': { 
        deps: ['underscore', 'jquery'], 
        exports: 'Backbone' 
       } 

      } 
     } 
    }); 

    define('app', ['jquery','backbone', 'underscore'], function ($, Backbone, _){ 

     var Model = Backbone.model.extend({}); 
     var model = new Model; 
    }); 

    require(['app','jquery', 'backbone', 'underscore']); 

Как я могу решить эту проблему?

+0

попробуйте изменить порядок определения вызова 'JQuery, подчеркивание, backbone' –

+0

возможный дубликат [Trouble комбинирования Require.js и Backbone.js/Underscore.js] (HTTP : //stackoverflow.com/questions/16774214/trouble-combining-require-js-and-backbone-js-underscore-js) – Louis

ответ

1

Вам по-прежнему необходимо указать underscore в составе paths, чтобы вы могли обратиться к нему в прокладках. Кроме того, не уверен, как выглядит ваша структура каталогов, но я пишу это с предположением, что код библиотеки находится в каталоге /js/libs). Наконец, обратите внимание, что вам не понадобится require любая из зависимостей app - радость RequireJS заключается в том, что она будет определять, что загрузить.

Итак ...

require.config({ 
    baseUrl: 'js/', 
    paths : { 
     'jquery' : 'lib/jquery', 
     'underscore' : 'lib/underscore', 
     'backbone' : 'lib/backbone', 
    }, 
    shim: { 
     'underscore': { 
      exports: '_' 
     }, 
     'backbone': { 
      deps: ['underscore', 'jquery'], 
      exports: 'Backbone' 
     } 

    } 
}); 

define('app', ['jquery','backbone', 'underscore'], function ($, Backbone, _){ 
    var Model = Backbone.Model.extend({}); 
    var model = new Model({ 
     foo: 'bar' 
    }); 

    var app = { 
     model: model 
    }; 

    // ... 

    return app; 
}); 

require(['app'], function(App) { 
    App.model.get('foo'); // <<=== returns 'bar' 
}); 
+0

Отлично! Большое спасибо. Но одна коррекция: 'App.model.get ('foo'); ' –

+0

Отредактировано в соответствии с примером. Спасибо, что приняли ответ! –

-1

Вам необходимо Underscore.js, как указано в вашем заявлении о необходимости.

+0

Ох. Я тебя не понимаю. Можете ли вы показать пример? –

+0

'require (['app', 'jquery', 'backbone', 'underscore']);' требует Underscore.js. Загрузите и перейдите к нему, как и любой другой JS-файл. – Will

+0

Я загрузил Underscore.js. Он находится в папке с другими скриптами. –

1

Прокладка указана внутри объекта пути. Я не уверен, что это проблема, но хотелось бы упомянуть об этом.

Смежные вопросы