【问题标题】:Javascript File Dependencies Not Being Resolved With Manifest Order清单顺序未解决 Javascript 文件依赖关系
【发布时间】: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.coffeetrips.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


    【解决方案1】:

    对于任何感兴趣的人来说,问题是因为范围界定。在生产中,所有文件都将加入application.js,但在开发中,它们仍然是单独的文件。我必须将该类添加到全局命名空间才能使其工作:

    ### ***********************************###
    ### ******* General Classes ***********###
    ### ***********************************###
    
    #single node for doubly linked list
    class this.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 this.DoublyList
      constructor: () ->
        @length = 0 #length of the current list
        @head = null #first node of the list
        @tail = null #last node of the list
    

    感谢this answer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-07
      • 2013-10-27
      相关资源
      最近更新 更多