2013-05-17 40 views
2

好吧,我很困惑。我正在試圖建立一個rails/backbons SPA。我與這個railscast下沿:http://railscasts.com/episodes/323-backbone-on-rails-part-1?autoplay=true「SyntaxError:unexpected}」當設置backbone.js與軌道

我從瀏覽器試圖訪問根頁面時出現此錯誤:

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> 

這裏是我的代碼 - 我只得到了幾分鐘到視頻。

raffler.js.coffee

#= 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() 

entries_router.js.coffee

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.coffee

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文件 - 當我去根頁面......它只是說「加載...」,它只是在應用程序初始化之前用作佔位符的代碼的反映。

也許一雙嶄新的眼睛...

UPDATE

我發現有人有類似的問題在這裏:

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 . 
+0

嚴...那是在我的崗位錯字......這是在我的代碼來適當地縮進。我只是編輯帖子來修復它。 – ewizard

回答

1

檢查您entry.js.coffee代碼在coffeescript.org 「嘗試的CoffeeScript」,我得到the same error

{}添加到defaults:清除錯誤,現在renders correctly

entry.js.coffee

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

    defaults: {} 

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

它擺脫了錯誤...但根據railscast應該顯示一個彈出窗口,說「主頁」。這不會發生。當我把你的代碼放到「Try Coffescript」並點擊「運行」時,它告訴我:ReferenceError:Raffler沒有定義 – ewizard