Магистраль: связывать не связывать - PullRequest
1 голос
/ 29 декабря 2011

Я только начал работать с магистралью, и я подумал Я был знаком со всеми предостережениями, связанными с привязкой данных.Оказывается, я не.Если у кого-то есть идеи, почему следующая коллекция не связана с IndexView, я был бы очень признателен.(Пробовал как вручную в браузере, так и в chrome консоли ... неуправляемый вызов console.log подтверждает, что render () не запускается)

С консоли попытка вызова:

window.router.project_view.options.projects.create({name: 'TestProject'})

Проект успешно создан, но нет вызова render ()

Маршрутизатор:

class Backbonescaffolddemo.Routers.CalendarsRouter extends Backbone.Router

  routes:
    ""           : "index"


  index: () ->

    @projects = new Backbonescaffolddemo.Collections.ProjectsCollection()
    ...
    @project_view = new Backbonescaffolddemo.Views.Projects.IndexView(projects: @projects)
    @task_view = new Backbonescaffolddemo.Views.Tasks.IndexView(tasks: @tasks)
    ...
    $('#projects').html(@project_view.render().el)

Коллекция / Модель:

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

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

Вид:

Backbonescaffolddemo.Views.Projects ||= {}

class Backbonescaffolddemo.Views.Projects.IndexView extends Backbone.View
  template: JST["backbone/templates/projects/index"]

  id: "projects"

  initialize: () ->
    @options.projects.fetch()
    _.bindAll(this, 'addOne', 'addAll', 'render')
    @options.projects.bind('reset', @addAll)
    @options.projects.bind('save', @addAll)
    @options.projects.bind('change', @addAll)
    @options.projects.bind('change', @render)
    @options.projects.bind('create', @render)

  addAll: () ->
    @options.projects.each(@addOne)

  addOne: (project) ->
    view = new Backbonescaffolddemo.Views.Projects.ProjectView({model: project})
    $(@el).append(view.render().el)

  render: ->
    console.log 'render called'
    $(@el).html(@template(projects: @options.projects.toJSON()))
    return this

1 Ответ

2 голосов
/ 29 декабря 2011

Добавление модели в коллекцию с помощью create или любым другим способом вызывает событие add в этой коллекции, а не событие create. Изменение

@options.projects.bind('create', @render)

до

@options.projects.bind('add', @render)
...