未捕获的类型错误: 无法调用未定义的方法'extend'



我正在尝试获得一个CoffeeScript类来扩展Backbone.Model。我构建了一个全新的rails 3.1应用程序,创建了一个具有3个属性的"Stone"脚手架,并将Todos.coffee示例的一个片段修补到stones.js.coffee中。我在app/assets/javascripts文件夹中有Backbone.js和undercore.js。当我在Chrome Java控制台下运行此操作时,我会在控制台日志中收到上面的消息。有什么想法吗?

实际代码如下:

$ -> 
  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 !@get("content")
      @set({ "content": @defaults.content })
    # Toggle the `done` state of this todo item.
    toggle: ->
      @save({ done: !@get("done") })
    # Remove this Todo from *localStorage* and delete its view.
    clear: ->
      @destroy()
      @view.remove()

所使用的application.js是由Rails 3.1生成的。我从Todos github repo中复制了backbone.js和undercore.js,https://github.com/JasonGiedymin/backbone-todojs-coffeescript

问题很简单,underscore.js是在backbone.js之后加载的,而它是必须在之前加载的先决条件。(请注意,在Backbone.js源代码中,它会立即设置var _ = root._,因此即使稍后声明全局_,它在Backbone的作用域中也不可见。)默认情况下,Sprockets会按字母顺序加载assets目录中的js文件。

你可以使用Sprockets解决这个问题:放置

//= require underscore.js

之前

//= require_tree .

以确保先加载。

最新更新