В настоящее время я нахожусь в процессе реорганизации наших файлов Javascript/Coffeescript в нашем приложении Rails 4 с использованием это руководство. До этого, из-за моего невежества в конвейере ресурсов, у нас была большая часть нашего кода в одном гигантском файле coffeescript. Цель состоит в том, чтобы разбить этот гигантский файл на логически управляемые части.
Наше приложение использует некоторые общие классы для определения программных структур, таких как двусвязный список. Я хотел поместить это в отдельный файл, app/assets/javascripts/misc_classes.coffee
:
### ***********************************###
### ******* General Classes ***********###
### ***********************************###
#single node for doubly linked list
class Node
constructor: (data) ->
@data = data
prev = null
next = null
#Doubly-linked list class, to be used for front-end destinations
#Details: https://en.wikipedia.org/wiki/Doubly_linked_list
class DoublyList
constructor: () ->
@length = 0 #length of the current list
@head = null #first node of the list
@tail = null #last node of the list
...
Остальной код нашего приложения находится в app/assets/javascripts/custom/trips.coffee
. Код в trips.coffee
использует класс двусвязного списка из другого файла javascript, описанного выше:
### ***********************************###
### ****** Custom Site Classes ********###
### ***********************************###
class Trip
constructor: (id, editable) ->
@id = id #trip_id
@title = 'New Trip'
@cities = 0 #number of citites in trip
@countries = 0 #number of countries in trip
@distance = 0 #distance in KM
@days = 0 #duration of trip in days
@destinations = new DoublyList()
...
Способ решения этой зависимость осуществляется через файл манифеста application.js
.
Если вам нужно, чтобы какой-то конкретный код JavaScript оказался выше другого в объединенном файле, сначала укажите необходимый файл в манифесте. Обратите внимание, что семейство директив require предотвращает двойное включение файлов в вывод.
Итак, наш файл application.js
выглядит так:
//= require jquery
//= require jquery.turbolinks
//= require jquery_ujs
//= require jquery-ui/sortable
//= require jquery-ui/datepicker
//= require colorbox-rails
//= require jquery.readyselector
//= require turbolinks
//= require jquery.externalscript
//= require misc_classes
//= require_tree ./custom/.
Однако, когда я запускаю код, я получаю в консоли следующую ошибку: Uncaught ReferenceError: DoublyList is not defined
Почему это происходит? Согласно другим сообщениям здесь, похоже, я правильно написал файл манифеста. Я также могу убедиться, что оба файла включены в раздел сайтов <header>
в правильном порядке.
Спасибо!