2013-03-07 2 views
0

Магистраль не вызывается в модуле indexview.requirejs + backbonejs + optimizer = backbone undefined

с использованием requirejs 2.1.5/2.1.4 и 0.9.10 backbonejs

main.js после запуска r.js

... 
// this is causing the backbone to return 
// null/undefined in the next define call below 
define("backbone", function(){}); 

define('views/index/IndexView', [ 
    'underscore', 
    'backbone', 
    'text!templates/index/indexTemplate.html' 
], function(_, Backbone, indexTemplate){ 

    console.log(Backbone); // returns undefined 
    var IndexView = Backbone.View.extend({ 
... 

НО, если я беру первый определяют вызов, который регистрирует позвоночник, как модуль, все отлично работает. но backbone-min.js загружается отдельно. но пока это единственный способ: , чтобы запустить скрипт. Я определенно чего-то здесь не вижу.

main.js

require.config({ 
    paths: { 
     underscore : 'libs/underscore/underscore-min', 
     backbone : 'libs/backbone/backbone-min' 
     templates : '../templates' 
    }, 
    shim: {   
     'backbone': { 
      deps: ['jquery','underscore'], 
      exports: 'Backbone' 
     } 
    } 
}); 

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

build.js

({ 
    appDir: "../", 
    baseUrl: "js", 
    dir: "../../build", 
    optimize: "none", 
    paths: { 
     "jquery": "libs/requirejs/require-jquery", 
     "underscore" : 'libs/underscore/underscore-min', 
     "backbone": 'libs/backbone/backbone-min', 
     "templates": '../templates', 
    }, 
    modules: [ 
     { 
      name: "main", 
      exclude: ["jquery"] 
     } 
    ]  
}) 

Я все еще получаю мои ноги мокрые с позвоночника и requirejs. любая обратная связь очень ценится.

+0

Должно быть, кроме вашей конфигурации , В моей сборке блок запроса выглядит так: define («backbone», ["jquery", "underscore"], (function (global) { return function() { var ret, fn; return ret | | global.Backbone; }; } (это))); Заметка, у меня также есть знак подчеркивания в моем shim.js – mbseid

+0

Можете ли вы добавить 'mainConfigFile' в свой файл build.js следующим образом:' mainConfigFile: 'app/main.js'' затем перестроить? – Mirodil

ответ

0

Прежде всего, вам не нужно определять («позвоночник», ...). Какая это часть в любом случае? Вам не нужно определять Backbone как модуль. Requirejs делает работу по созданию Backbone, доступной для вас, чтобы использовать ее в своей структуре. Как вы можете видеть в своем коде, вызывая Backbone.View.extend(), Backbone уже существует. Если вы хотите его проверить, не используйте console.log, вместо этого используйте console.dir. В хромовом инспекторе он отлично форматирует выход.

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

+0

define ('backbone', ...) генерируется автоматически сценарием оптимизатора. это также то, что я заметил в учебнике require-jquery на сайте requirejs. – pneftali

+0

также, подчеркивание уже зарегистрировано как зависимость в моей прокладке. – pneftali

0

Я только что имел этот вопрос, вам нужно добавить «подкладку» из вашего main.js в файл build.js, и будет работать как очарование;)

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