2014-11-21 2 views
1

Я пытаюсь оптимизировать проект магистрали с Grunt и grunt-contrib-requirejs плагин. Проект имеет следующую структуру:Backbone + r.js: Магистраль не определена

- root/ 
    |- public/ 
    | |- components/ 
    | |- js/ 
    | | |- login/ 
    | | | |- [dirs and files] 
    | | | |- main.js     
    | |- libs/ 
    |- gruntfile.js 

В components и libs каталог У меня есть библиотеки, установленные с Бауэром. gruntfile.js имеет следующие варианты requirejs:

requirejs: { 
    compile: { 
    options: { 
     name: "main", 
     baseUrl: "public/js/login/", 
     mainConfigFile: "public/js/login/main.js", 
     out: "public/js/app.build.js", 
     findNestedDependencies: true, 
    } 
    } 
}, 

В bower.json У меня есть следующие зависимости:

"dependencies": { 
    "jquery": "2.0.3", 
    "jquery.cookie": "1.4.1", 
    "underscore": "1.6.0", 
    "backbone": "~1.1.2", 
    "backbone-validation": "~0.9.1", 
    "backbone-mediator": "~1.0.0", 
    "backbone.subviews": "~0.7.3", 
    "font-awesome": "~4.1.0", 
    "bootstrap": "~3.2.0", 
    "requirejs": "~2.1.14", 
    "require-handlebars-plugin": "~0.8.1", 
    "pace": "~0.5.5", 
    "modernizr": "~2.8.3", 
    "fastclick": "~1.0.2", 
    "moment": "~2.7.0", 
    "sweetalert": "~0.2.1" 
} 

наконец, main.js имеет конфигурацию requirejs и основное приложение:

require.config({ 
    waitSeconds: 0, 
    hbs: { 
    templateExtension: 'html', 
    disableI18n: true, 
    disableHelpers: true 
    }, 
    shim: { 
    'jquery': { 
     exports: '$' 
    }, 
    'jqueryCookie': { 
     deps: ['jquery'] 
    }, 
    'underscore': { 
     exports: '_' 
    }, 
    'backbone': { 
     deps: ['underscore', 'jquery'], 
     exports: 'Backbone' 
    },  
    'backboneREST' : { 
     deps: ['backbone'] 
    }, 
    'backboneValidation' : { 
     deps: ['backbone'] 
    }, 
    'handlebars': { 
     deps: ['handlebars'], 
     exports: 'Handlebars' 
    } 
    }, 
    paths: { 
    jquery:    '../../components/jquery/jquery.min', 
    jqueryCookie:  '../../components/jquery.cookie/jquery.cookie', 
    underscore:   '../../components/underscore/underscore', 
    backbone:   '../../components/backbone/backbone', 
    backboneValidation: '../../components/backbone-validation/src/backbone-validation', 
    backboneSubviews: '../../components/backbone.subviews/backbone.subviews', 
    hbs:     '../../components/require-handlebars-plugin/hbs', 
    moment :    '../../components/moment/moment', 
    modernizr:   '../../components/modernizr/modernizr', 
    sweetAlert:   '../../components/sweetalert/lib/sweet-alert', 
    client:    '../../libs/client', 
    backboneREST:  '../../libs/backbone-rest', 
    viewManager:   '../../libs/view-manager', 
    errorManager:  '../../libs/error-manager', 
    } 
}); 

Запуск задачи черновую дает мне сообщение Done, without errors., но когда я попытался загрузить результирующий скрипт t в браузере, это дает мне ошибку Backbone is not defined. Исходные карты говорят, что он падает в Backbone.Validation. Есть идеи, как это исправить?

ответ

0

Поскольку Backbone.validation расширяет магистраль, вы должны экспортировать Backbone на свой прокладку, чтобы она не была переопределена.

'backboneValidation' : { 
    deps: ['backbone'], 
    exports: 'Backbone' 
} 

Надеюсь, что он решает вашу проблему.

1

У меня была такая же ошибка несколько дней назад. Я исправил использование версии AMD (backbone-validation-amd-min.js) вместо стандартной версии.

+0

Не могли бы вы уточнить? – Robert

+0

Да, это были две ошибки - я использовал стандартную версию. Другая проблема заключалась в том, что я использовал функцию 'define' вместо' requirejs' в качестве точки входа моего приложения. –

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