未捕获的TypeError:无法调用未定义的方法'extend'

exp*_*ner 4 coffeescript backbone.js ruby-on-rails-3.1

我试图获得一个CoffeeScript类来扩展Backbone.Model.我构建了一个全新的rails 3.1应用程序,创建了一个具有3个属性的'Stone'脚手架,并将一个Todos.coffee示例的片段修补到stones.js.coffee中.我在app/assets/javascripts文件夹中有backbone.js和underscore.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()
Run Code Online (Sandbox Code Playgroud)

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

Tre*_*ham 16

问题只是underscore.js在之后加载backbone.js,当它是必须先加载的先决条件时.(请注意Backbone.js源中它var _ = root._立即设置,因此即使_稍后声明了全局,它也不会从Backbone的范围中看到.)Sprockets默认按字母顺序加载资源目录中的JS文件.

您可以使用Sprockets:Put解决此问题

//= require underscore.js
Run Code Online (Sandbox Code Playgroud)

之前

//= require_tree .
Run Code Online (Sandbox Code Playgroud)

确保首先加载它.