2012-01-06 99 views
4

我想要獲取CoffeeScript類來擴展Backbone.Model。我創建了一個全新的rails 3.1應用程序,創建了一個帶有3個屬性的'Stone'腳手架,並將Todos.coffee示例的代碼片段修改爲stones.js.coffee。我在app/assets/javascripts文件夾中同時擁有backbone.js和underscore.js。當我在Chrome Java控制檯下運行時,我在控制檯日誌中獲得了上面的消息。有任何想法嗎?Uncaught TypeError:無法調用未定義的方法'extend'

實際代碼如下:正在使用

$ -> 

    class Todo extends Backbone.Model 
    # Default attributes for the todo. 
    defaults: 
    content: "empty todo..." 
    done: false 

    # Ensure that each todo created has `content`. 
    initialize: -> 
     if [email protected]("content") 
     @set({ "content": @defaults.content }) 

    # Toggle the `done` state of this todo item. 
    toggle: -> 
     @save({ done: [email protected]("done") }) 

    # Remove this Todo from *localStorage* and delete its view. 
    clear: -> 
     @destroy() 
     @view.remove() 

的的application.js是通過滑軌3.1產生什麼。我複製了Backbone.js的和underscore.js從託多斯GitHub庫,https://github.com/JasonGiedymin/backbone-todojs-coffeescript

+0

確保backbone.js和underscore.js實際上被添加到頁面中。如果您處於開發環境中,您應該能夠查看源代碼並查看它們是否包含在內。 你可以粘貼你的application.js或你在這個視圖中使用的任何清單文件嗎? – Sandro 2012-01-06 18:53:10

回答

16

的問題很簡單,underscore.js正在backbone.js加載後,當它是一個必須之前加載的前提條件。 (請注意,在Backbone.js source中,它立即設置爲var _ = root._,所以即使稍後聲明全局_,它也不會從Backbone的作用域中看到。)默認情況下,Sprockets按照字母順序將JS文件加載到資產目錄中。

可以解決這個問題用鏈輪:將

//= require underscore.js 

//= require_tree . 

,以確保它的第一次加載。

+0

謝謝,就是這樣。我想知道js訂購... – explainer 2012-01-06 22:21:16

相關問題