質問

Strange error on index page load using backbone-relational in rails TypeError: set is undefined

Here is part of backbone-relational.js source. Error is pointing on line 1931: 1891: var set = Backbone.Collection.prototype.__set = Backbone.Collection.prototype.set; ... 1931: var result = set.call( this, toAdd, _.defaults( { parse: false }, options ) );

Here is my code:

router:

class Todo.Routers.ProjectsRouter extends Backbone.Router
  initialize: (options) ->
    @projects = new Todo.Collections.ProjectsCollection()
    @projects.reset options.projects

  routes:
    "new"      : "newProject"
    "index"    : "index"
    ":id/edit" : "edit"
    ":id"      : "show"
    ""        : "index"

  newProject: ->
    @view = new Todo.Views.Projects.NewView(collection: @projects)
    $("#projects").html(@view.render().el)

  index: ->
    @view = new Todo.Views.Projects.IndexView(projects: @projects)
    $("#projects").html(@view.render().el)

  show: (id) ->
    project = @projects.get(id)

    @view = new Todo.Views.Projects.ShowView(model: project)
    $("#projects").html(@view.render().el)

  edit: (id) ->
    project = @projects.get(id)

    @view = new Todo.Views.Projects.EditView(model: project)
    $("#projects").html(@view.render().el)

models:

class Todo.Models.Task extends Backbone.RelationalModel
  paramRoot: 'task'

  defaults:
    title: null

class Todo.Collections.TasksCollection extends Backbone.Collection
  model: Todo.Models.Task
  url: '/tasks'

class Todo.Models.Project extends Backbone.RelationalModel
  paramRoot: 'project'

  defaults:
    title: null

  relations: [
    type: Backbone.HasMany
    key: 'tasks'
    relatedModel: 'Todo.Models.Task'
    collectionType: 'Todo.Collections.TasksCollection'
    includeInJSON: false
    reverseRelation:
      key: 'project_id'
      includeInJSON: 'id'
  ]

class Todo.Collections.ProjectsCollection extends Backbone.Collection
  model: Todo.Models.Project
  url: '/projects'

Any suggestions? On index.html I have

window.router = new Todo.Routers.ProjectsRouter({projects: #{@projects.to_json({:include => :tasks}).html_safe}});

Seems like it appears on @projects.reset options.projects in router

役に立ちましたか?

解決

It appears to be an old backbone version in rails-backbone gem at rubygems.org To fix it just update backbone to last version. If you are using rails-backbone gem, change gem 'rails-backbone' to gem 'rails-backbone', git: "https://github.com/codebrew/backbone-rails.git" in your gemfile

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top