2014-02-05 3 views
0

Я использую магистраль и требую js для простого приложения, которое я пытаюсь сделать. Тем не менее, каждый раз, когда я пытаюсь запустить приложение в браузере, я получаю ошибку «Backbone is null». Я указываю на строку, где он пытается расширить модель Backbone, но я понятия не имею, почему Backbone приходит как null? У кого-нибудь есть предложения? Я читал и возился с require.config, но он все еще не работает.Backbone is null

//main.js (this is my data-main) 

require.config({ 
    baseUrl: 'scripts/lib', 
    paths: { 
     'model': '../app/models' 
    }, 
    waitSeconds: 30, 
    shim: { 
     'backbone': { 
      deps: ['underscore', 'jquery'], 
      exports: 'Backbone' 
     }, 
     'underscore': { 
      exports: '_' 
     } 
    } 
}); 
require([ 
    'jquery', 
    'underscore', 
    'backbone', 
    'model/comic' 
], function (
    $, 
    _, 
    Backbone, 
    Comic 
) { 
    console.log("Files loaded successfully"); 
}); 

//comic.js (this is my model) 

require(["backbone"], function (Backbone) { 
    return Backbone.Model.extend({ 
     initialize: function (options) { 
      this.comicName = options.comicName || ""; 
      this.author = options.author || ""; 
      this.issueNumber = options.issueNumber || ""; 
      console.log(this.comicName); 
     } 
    }); 
}); 
Directory Hierarchy 
------------------- 
    main.html 
    assets 
     scripts 
     app 
      models 
      comic.js 
     lib 
      backbone.js 
      underscore.js 
      require.js 
      jquery.js 
     styles 
     bootstrap.min.css 
+0

Не могли бы вы попросить их вместо определения. –

+0

Хорошо, поэтому я попробовал require вместо define, и он выполнил функцию после загрузки зависимостей. Таким образом, я вижу, что «Файлы загружены успешно», однако он все еще бросает Backbone - это неопределенная ошибка. Любая идея о том, почему? Спасибо за помощь, кстати. Также зачем требовать работу и не определять? – HerrPfister

ответ

2

В ваших путях объект вы должны сказать requirejs, где найти системообразующий .js файл с псевдонимом «позвоночник». Вам нужно будет сделать то же самое с подчеркиванием и jQuery

paths:{ 
    'model' : '../app/models', 
    'backbone' : 'path/to/backbone-min', //note you don't put the .js extension here 
    'underscore' : 'path/to/underscore-min', 
    'jquery' : 'path/to/jquery-min' 

}, 
+0

Извините, я должен был что-то сказать о иерархии каталогов. Backbone, jQuery и подчеркивание находятся в папке scripts/lib, которая была задана свойством baseUrl. Итак, исправьте меня, если я ошибаюсь, но не заботятся об этих путях? – HerrPfister

+0

Это должно работать, если оно названо следующим образом: 'lib/backbone.js' – jax