Ответ 1
Похоже, что вы не включаете файл, содержащий объявление App.Controllers.Fffforms
. Убедитесь, что вы вставляете этот файл где-то в свой код до того момента, когда вы включаете application.js.
Я только начал вникать в javascript, чтобы сделать проект более отзывчивым, и я работаю над примером backbone.js.
Я реплицировал http://www.jamesyu.org/2011/01/27/cloudedit-a-backbone-js-tutorial-by-example/ в новый проект Rails 3.
Я запускаю проект и перехожу на домашнюю страницу.... и там есть ссылка на /# и ничего больше. Заглядывая в консоль js, я получаю ошибки в двух сценариях: application.js и backbone.js
Это (backbone.js)
backbone-min-0-3-3.js:8Uncaught TypeError: Cannot call method 'extend' of undefined
и this (application.js):
var App = {
Views: {},
Controllers: {},
Collections: {},
init: function() {
new App.Controllers.Fffforms();
**error message ---> application.js:9Uncaught TypeError: undefined is not a function**
Backbone.history.start();
}
};
Будучи новичком в js, это не имеет никакого смысла, и ничто из того, что я искал, было очень полезным в краткосрочной перспективе.
Может ли кто-нибудь сказать мне, что именно будут указывать эти ошибки, и как я могу идти дальше? Все проверяет сравнение ресурсов в https://github.com/jamesyu/CloudEdit, но моя репликация из нового проекта rails 3 (а не клон этого репо) не работает точно.
Любые предложения, оцененные, учитывая, что я только начал изучать некоторые javascript.
EDIT:
По предложению я пошел и фактически добавлен в жемчужину Jammit и настроил его, чтобы обслуживать все js-скрипты, которых по умолчанию Rails все не было. Теперь все сценарии идут в браузер (включая контроллер). К сожалению, это не решает исходную проблему, но только дает больше ошибок при загрузке, протекающих из App init, которая находится в консоли chrome js:
Uncaught TypeError: undefined is not a function
App.initapplication.js:9
(anonymous function):3000/#new:32
d.extend._Deferred.f.resolveWithjquery.min.js:16
d.d.extend.readyjquery.min.js:16
d.c.addEventListener.yjquery.min.js:16
Учитывая, что я просто копирую прямо сейчас, должна быть какая-то небольшая пропущенная деталь, выходящая за пределы меня, которая препятствует правильному запуску приложения.
Похоже, что вы не включаете файл, содержащий объявление App.Controllers.Fffforms
. Убедитесь, что вы вставляете этот файл где-то в свой код до того момента, когда вы включаете application.js.
Я предполагаю, что в приложении есть своего рода механизм связывания. Убедитесь, что все файлы имеют правильное использование точек с запятой (;) во всех связанных файлах.
Мой ответ похож на @ream88, но функция Rails 3.1+ Asset Pipeline заботится о минимизации, объединении и т.д., поэтому я предпочитаю, чтобы для отладки были доступны не-минированные версии и т.д.
Итак, загрузите прокомментированную/полную версию backbone.js и подчеркивание .js и сохраните их в app/assets/javascripts
(вы также можете сохранить их в vendor/assets/javascripts
).
Разница в том, что вы должны обновить файл манифеста (app/assets/javascripts/application.js
), чтобы добавить необходимые директивы, например
//= require jquery
//= require jquery_ujs
//= require underscore
//= require backbone
//= require_tree .
Поскольку основная линия зависит от подчеркивания, это приведет к тому, что они будут загружены в правильном порядке, что позволит избежать ошибки.
Иди в ту же проблему, а затем я понял, что я не включил underscore.js
в любом месте. Поэтому я написал простой файл backbone.js
:
/*
*= require backbone/underscore-min.js
*= require backbone/backbone-min.js
*/
и сохранил его под vendor/assets/javascripts
вместе с файлами Backbone и Underscore:
vendor/assets/javascripts/
├── backbone
│ ├── backbone-min.js
│ └── underscore-min.js
└── backbone.js
Мой application.js.coffee
теперь выглядит примерно так:
#= require backbone
#= require query
Это просто забило меня, поэтому я решил поделиться своей находкой: убедитесь, что окончание строки файла соответствует вашей файловой системе сервера.