Rails ExecJS上的主干:: Main #index中的RuntimeError

时间:2014-01-03 15:52:00

标签: javascript jquery ruby-on-rails backbone.js coffeescript

我正在通过Rails Railscast上的Backbone学习Backbone.js。在第2部分第325集中,他们将$('#new_entry')[0].reset()添加到entries_index.js.coffee文件中(见下文)。这应该在表单添加到列表后清除表单中的文本。我正在使用Rails版本4.0.0。

class Raffler.Views.EntriesIndex extends Backbone.View

  template: JST['entries/index']

  events:
    'submit #new_entry': 'createEntry' 

  initialize: ->
    @collection.on('reset', @render, this)
    @collection.on('add', @appendEntry, this)

  render: ->
    $(@el).html(@template(entry: @model))
    @collection.each(@appendEntry)
    this

  appendEntry: (entry) ->
    view = new Raffler.Views.Entry(model: entry)
    @$('#entries').append(view.render().el)

  createEntry: (event) ->
    event.preventDefault()
    @collection.create name: $('#new_entry_name').val()
    $('#new_entry')[0].reset()

我在localhost上重新加载页面时遇到这些错误:

ExecJS::RuntimeError in Main#index
SyntaxError: unexpected CALL_START
  (in /Users/lionelramos/Documents/raffler/app/assets/javascripts/views/entries/entries_index.js.coffee)

我的日志有:

ActionView::Template::Error (SyntaxError: unexpected JS
  (in /Users/lionelramos/Documents/raffler/app/assets/javascripts/views/entries/entries_index.js.coffee)):

我的索引模板(index.jst.eco)很小:

<h1>Raffler</h1>

<form id="new_entry">
  <input type="text" name="name" id="new_entry_name">
  <input type="submit" value="Add">
</form>
<ul id="entries"></ul>

2 个答案:

答案 0 :(得分:0)

尝试在方法调用周围显式添加括号和/或围绕对象参数使用大括号,如this issue中所示。

具体来说:

@collection.create({ name: $('#new_entry_name').val() })

根据我在js2coffee.org的测试:

# this parses
action key: "value", variable

# while this doesn't
action key: "value", some_function()

答案 1 :(得分:0)

我很尴尬地说这个错误与event.preventDefault()上的缩进有关。我有几个空格和一个标签,而不是2个标签。有趣的时光!