【问题标题】:ROR - coffeescript causing "Uncaught ReferenceError"ROR - 导致“未捕获的 ReferenceError”的咖啡脚本
【发布时间】:2014-11-04 18:44:19
【问题描述】:

我得到的错误令人费解,因为我从一个控制器/视图/javascript 复制了一些工作代码,进行名称更改并取出行以获得初始工作版本。导致运行时错误的咖啡脚本文件的相关部分如下。

app/assets/javascripts/companies.js.coffee

...
calculateResult = (company_id)-> 
  data = $('#x_company_drill_interests').serialize()
  console.log(" -01- in calculateResult ")
  console.log data
  $.ajax
    url:"/companies/#{company_id}/projection.json",
    type:"post"
    dataType: 'json'   # data type of response
    data: data
    failure: (data,success,xhr)->
       console.log(" -01- in calculateResult - Failure ")
       console.log data
    success: (data,success,xhr)->
       console.log("-01- in calculateResult - SUCCESS ")
       company_listings_block = $ '#x_company_listings_results .infogroup-body'
       head_row = $ '''
<tr>
  <th>Company</th>
</tr>
'''
      table = $ '<table border="0" cellpadding="0" cellspacing="5"></table>'
      table
        .addClass('info')
        .append(head_row)
      for result in data
        name = result.display_name
        result_row = $ """
<tr>
  <td>#{name}</td>
</tr>
"""
        table.append result_row
      eval_result_block.html('').append table

产生错误:

未捕获的引用错误:未定义 head_row

这是由.append(head_row) 行引起的。如果我删除此行,我会收到此错误Uncaught ReferenceError: eval_result_block is not defined

另外由于某种原因,我无法获取使用 Post 路由的代码。这就是我添加修改路由文件的方式。

config/rutes.rb

resources :companies, only: [:destroy, :update] do
  member do
    get 'companies_drill_interests'
    match 'projection', via: [:get,:post, :patch]
  end
end

这里是我复制的工作代码供参考

calculateResult = (drill_id)->
  console.log("  -001- in calculate results")
  data = $('#x_evaluation_assumption_params').serialize()
  $.ajax
    url:"/drills/#{drill_id}/projection.json",
    type:"post"
    dataType: 'json'   # data type of response
    data: data
    failure: (data,success,xhr)->
      console.log("     -001- in Calculate Result - Failure ")
      console.log data
    success: (data,success,xhr)->
      # console.log("     -001-     print data from call")
      eval_result_block = $ '#x_id_evaluation_results .infogroup-body'
      head_row = $ '''
<tr>
  <th>Company</th>
  <th>Price</th>
  <th>Mkt Cap</th>
  <th>Discovery Value</th>
  <th>Target Price</th>
  <th>Leverage</th>
  <th>Risked Lev </th>
  <th>Leverage with CFD's</th>
</tr>
'''
      table = $ '<table border="0" cellpadding="0" cellspacing="5"></table>'
      table
        .addClass('info')
        .append(head_row)
      for result in data
        if !(result.listing.option_unlisted) 
          name = result.display_name
          share_price = '$' +
            NumberHelpers.number_with_precision((result.listing.share_price/1000), {separator: '.', precision: 3, delimiter: ','})
          market_capitalisation_mill = '$' +                 
             NumberHelpers.number_with_precision((result.market_capitalisation/1000000), {separator: '.', precision: 1, delimiter: ','}) + 'M'
          discovery_value = '$' + 
            NumberHelpers.number_with_precision(result.discovery_value_total, {separator: '.', precision: 0, delimiter: ','})
          discovery_value_per_share = '$' + 
            NumberHelpers.number_with_precision((result.target_share_price), {separator: '.', precision: 2, delimiter: ','})
          leverage = 
        NumberHelpers.number_with_precision(result.leverage, {separator: '.', precision: 0, delimiter: ','}) + '%'
      risked_leverage =  
            NumberHelpers.number_with_precision(result.risked_leverage, {separator: '.', precision: 0, delimiter: ','}) + '%'
          leverage_with_CFD = 
            NumberHelpers.number_with_precision(result.leverage_with_CFD, {separator: '.', precision: 0, delimiter: ','}) + '%'
          result_row = $ """
<tr>
  <td>#{name}</td>
  <td>#{share_price}</td>
  <td>#{market_capitalisation_mill}</td>
  <td>#{discovery_value}</td>
  <td>#{discovery_value_per_share}</td>
  <td>#{leverage}</td>
  <td>#{risked_leverage}</td>
  <td>#{leverage_with_CFD}</td>
</tr>
"""
        table.append result_row
      eval_result_block.html('').append table

【问题讨论】:

  • 是的,所以在底部代码中设置了 eval_result_block,在您使用的代码中,您已将其切换到 company_listings_block。
  • 谢谢 - 我刚刚纠正了这一点并得到了同样的错误。我已经复制并多次删除了代码,但忘记在最后一个副本上进行更改。

标签: javascript coffeescript


【解决方案1】:

在第一个代码中,eval_result_block 在使用之前没有定义。 关于result_row,在它的第一部分代码中进入了for循环,而在代码的另一部分中它在这个for循环之外,因为risked_leverage有不同的缩进,4个空格更短。这意味着它在for 循环之外,所以,这就是为什么result_row 也在外面。

在咖啡脚本中,缩进。如果你放 3 个空格而不是 2 个,生成的代码会有所不同。看看你的代码:

failure: (data,success,xhr)->
   console.log(" -01- in calculateResult - Failure ")
   console.log data
success: (data,success,xhr)->
   console.log("-01- in calculateResult - SUCCESS ")
   company_listings_block = $ '#x_company_listings_results .infogroup-body'
   head_row = $ '''

如果不同

failure: (data,success,xhr)->
  console.log(" -01- in calculateResult - Failure ")
  console.log data
success: (data,success,xhr)->
  console.log("-01- in calculateResult - SUCCESS ")
  company_listings_block = $ '#x_company_listings_results .infogroup-body'
  head_row = $ '''

因为第一种情况有 3 个空格,而第二种情况有 2 个空格。

这里有正确缩进的代码。通过阅读您的代码,我认为result_rowtable.append result_row 必须在for 循环中。

calculateResult = (company_id)-> 
  data = $('#x_company_drill_interests').serialize()
  console.log(" -01- in calculateResult ")
  console.log data
  $.ajax
    url:"/companies/#{company_id}/projection.json",
    type:"post"
    dataType: 'json'   # data type of response
    data: data
    failure: (data,success,xhr)->
      console.log(" -01- in calculateResult - Failure ")
      console.log data
    success: (data,success,xhr)->
      console.log("-01- in calculateResult - SUCCESS ")
      company_listings_block = $ '#x_company_listings_results .infogroup-body'
      head_row = $ '''
<tr>
  <th>Company</th>
</tr>
'''
      table = $ '<table border="0" cellpadding="0" cellspacing="5"></table>'
      table
        .addClass('info')
        .append(head_row)
      for result in data
        name = result.display_name
        result_row = $ """
<tr>
  <td>#{name}</td>
</tr>
"""
        table.append result_row
      company_listings_block.html('').append table

您可以尝试将代码的每一部分编译成javascript,它会帮助您了解发生了什么。 Coffee compiler

【讨论】:

  • 泽维尔 - 谢谢。我将问题标记为已解决 - 如果你没有得到 50 分,请告诉我 - 皮埃尔
  • 再次等待回答 - 没有意识到我必须点击刚刚完成的赏金图标。
猜你喜欢
  • 1970-01-01
  • 2012-08-13
  • 1970-01-01
  • 2015-12-12
  • 1970-01-01
  • 2012-08-26
  • 1970-01-01
相关资源
最近更新 更多