2

わかりました、私は困惑しています。Rails/backbons SPA をセットアップしようとしています。私はこの Railscast に従っています: http://railscasts.com/episodes/323-backbone-on-rails-part-1?autoplay=true

ルート ページにアクセスしようとすると、ブラウザから次のエラーが表示されます。

ExecJS::RuntimeError in Main#index

Showing /Users/Eamon/raffle/raffler/app/views/layouts/application.html.erb where line #6      raised:

SyntaxError: unexpected }
  (in /Users/Eamon/raffle/raffler/app/assets/javascripts/backbone/models/entry.js.coffee)

Extracted source (around line #6):

3: <head>
4:   <title>Raffler</title>
5:   <%= stylesheet_link_tag    "application", :media => "all" %>
6:   <%= javascript_include_tag "application" %>
7:   <%= csrf_meta_tags %>
8: </head>
9: <body>

これが私のコードです - 私はビデオに数分しかかかりませんでした.

ラフラー.js.コーヒー

#= require_self
#= require_tree ./templates
#= require_tree ./models
#= require_tree ./views
#= require_tree ./routers

window.Raffler =
  Models: {}
  Collections: {}
  Routers: {}
  Views: {}
  init: -> 
    new Raffle.Routers.Entries()
    Backbone.history.start()

$(document).ready ->
  Raffler.init()

エントリ_ルーター.js.コーヒー

class Raffler.Routers.EntriesRouter extends Backbone.Router
  initialize: (options) ->
    @entries = new Raffler.Collections.EntriesCollection()
    @entries.reset options.entries

  routes:
    "new"      : "newEntry"
    ''         : 'index'
    ":id/edit" : "edit"
    ":id"      : "show"

  newEntry: ->
    @view = new Raffler.Views.Entries.NewView(collection: @entries)
    $("#entries").html(@view.render().el)

  index: ->
    alert "home page"

  show: (id) ->
    entry = @entries.get(id)

    @view = new Raffler.Views.Entries.ShowView(model: entry)
    $("#entries").html(@view.render().el)

  edit: (id) ->
    entry = @entries.get(id)

    @view = new Raffler.Views.Entries.EditView(model: entry)
    $("#entries").html(@view.render().el)

上記のコードのほとんどは、キャストのこの時点では無関係であることを知っています...それはすべて足場ジェネレーターによって作成されました-何も削除する必要はないと考えました。

entry.js.コーヒー

class Raffler.Models.Entry extends Backbone.Model
  paramRoot: 'entry'

  defaults:

class Raffler.Collections.EntriesCollection extends Backbone.Collection
  model: Raffler.Models.Entry
  url: '/entries'

上記のファイルは、エラーが発生していると思われる場所です。どこにも構文エラーが見つからないようです。キャスト ページの railscast に関連するコードで、entry.js.coffee だけが含まれていることに気付きました。

class Raffler.Models.Entry extends Backbone.Model

entry.js.coffee ファイルのその行を除くすべてを削除しようとしました-ルートページに移動すると...「読み込み中...」と表示されますが、これは以前のプレースホルダーとして使用されたコードを反映したものですアプリが初期化されます。

多分新鮮な目...

アップデート

ここで同様の問題を抱えている人を見つけました:

rails: backbone-on-rails gem-

これと他のいくつかの関連投稿を見た後... //=require_tree を削除してみました。application.js の行。他のいくつかの投稿では、それは一番下にある必要があると言われています...しかし、私のものはすでにそうでしたので、それも問題ではありません. 関連する場合は、ここに私のapplication.jsファイルがあります:

// This is a manifest file that'll be compiled into application.js, which will include all the files
// listed below.
//
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
//
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
// the compiled file.
//
// WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
// GO AFTER THE REQUIRES BELOW.
//
//= require jquery
//= require jquery_ujs
//= require underscore
//= require backbone
//= require backbone_rails_sync
//= require backbone_datalink
//= require backbone/raffler
//= require_tree .
4

1 に答える 1

1

coffeescript.orgの「Try Coffeescript」でentry.js.coffeeコードを確認すると、同じエラーが発生します

に追加{}するdefaults:とエラーが解消され、正しくレンダリングされるようになりました。

entry.js.コーヒー

class Raffler.Models.Entry extends Backbone.Model
  paramRoot: 'entry'

  defaults: {}

class Raffler.Collections.EntriesCollection extends Backbone.Collection
  model: Raffler.Models.Entry
  url: '/entries'
于 2013-05-17T21:23:43.390 に答える