【发布时间】:2016-07-16 22:45:41
【问题描述】:
我目前正在使用this tutorial 重新组织Rails 4 应用程序中的Javascript/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()
...
从Rails Asset Pipeline Guide 开始,处理这种依赖关系的方法是通过application.js 清单文件。
如果您需要确保某些特定 JavaScript 在连接文件中高于其他 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> 部分中。
谢谢!
【问题讨论】:
标签: javascript ruby-on-rails coffeescript asset-pipeline sprockets