2013-04-12 2 views
0

Я получаю магистраль - это неопределенная ошибка при попытке применить require js к моему коду. Я читал другие статьи на сайте, говорящие, чтобы использовать прокладку, и это не решило проблему.Требовать js и магистраль

хелперы/util.js:

require.config({ 

waitSeconds: 10, 
paths: { 
    "jquery": "https://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min", 
    "underscore": "http://ajax.cdnjs.com/ajax/libs/underscore.js/1.1.6/underscore-min", 
    "backbone": "http://ajax.cdnjs.com/ajax/libs/backbone.js/0.3.3/backbone-min" 
}, 
shim: { 
    jquery: { 
     exports: "$" 
    }, 
    underscore: { 
     exports: '_' 
    }, 
    backbone: { 
     deps: ["underscore","jquery"], 
     exports: "Backbone" 
    }, 
    app: { 
     deps: ["backbone"], 
     exports: "App" 
    } 
} 

}); 
require(["Scripts/jquery.flip.min.js"]); 
require(["Scripts/jquery-ui-1.10.2.custom.min.js"]); 
require(["Scripts/RatingProviders.js"]); 

main.js:

require(["helper/util"], function(App) { 
    //Models 
    TestProvider = Backbone.Model.extend({ 
     defaults: { 
      ID: '', 
      Name: '', 
     }, 
     initialize: function() { 
      this.ID= ''; 
      this.Name= ''; 
     } 
    }); 
}); 
+0

Ну, содержимое файла helper/util.js было бы очень полезно. – Loamhoof

ответ

2

Моя догадка бы, что вы никогда на самом деле require Backbone.

Попробуйте требовать его так:

require(["helper/util", "Backbone"], function(App) { 
    //Models 
    TestProvider = Backbone.Model.extend({ 
     defaults: { 
      ID: '', 
      Name: '', 
     }, 
     initialize: function() { 
      this.ID= ''; 
      this.Name= ''; 
     } 
    }); 
}); 

Shim конфигурация сообщает загрузчик, что делать, когда Backbone является частью требований соответствующего модуля, но не на самом деле модуль AMD.

2

В целом, ваш файл не имеет большого смысла. Здесь вы находитесь , определяя класс, поэтому вы должны использовать функцию define.

define(["helper/util"], function(App) { 

Вы не используете App вар, поэтому давайте удалим его:

define([], function() { 

Теперь мы хотим включить Backbone (см ответ Nirazul в для прокладки объяснения), чтобы убедиться, что он загружен. Кроме того, Backbone будет глобальным переменным, так что вы не обязаны декларировать его в списке аргументов:

define(['backbone'], function() { 

Теперь, вы должны вернуть новый класс:

return TestProvider = Backbone.Model.extend({ 

Кроме того, для ваш плагин jQuery, вы также можете изменить некоторые вещи. Сначала объявите их в require.config (укажите jQuery как зависимость в прокладке). Затем добавьте их как зависимости к любому классу, который их требует. Таким образом, вы загружаете их асинхронно, когда они действительно необходимы.

+0

Я предполагаю, что целью было предоставить пример для проверки требуемой функциональности. Конечно, это могло бы быть иначе ... – nirazul

+0

@ Нираззул, возможно, вы правы, но такой пример, на мой взгляд, мало понимает требования. Поэтому я просто предоставляю как можно больше деталей. – Loamhoof

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