Backbone: привязка к div-элементу представления представления - PullRequest
0 голосов
/ 30 декабря 2011

У меня есть магистральный IndexView, который вызывает TaskView для каждой модели «задачи».Я хотел бы связать событие с элементом li, который оборачивает представление задачи.Так, например, атрибут «className» - это «задача», и я хочу вызвать событие в «.task».

Я могу выполнить привязку из родительского представления (IndexView), но мне нужен доступк информации внутри щелчкового представления, которое, как я предполагаю, означает, что событие должно быть связано с дочерним TaskView (?)

(Кроме того, классы DOM внутри могут иметь доступ к фактическому шаблону задач... только не оберточный*

class Backbonescaffolddemo.Views.Tasks.TaskView extends Backbone.View
  template: JST["backbone/templates/tasks/task"]

  tagName: "li"
  className: "task"

  events:
    "click .task"    : "demoMethod"

  initialize: () ->
    _.bindAll(this, 'demoMethod', 'render')
    console.log @
    #@showTask()
    @el.id = 'sort_order_' + @model.get('id') if @model

  destroy: () ->
    @model.destroy()
    this.remove()
    return false

  demoMethod: () ->
    console.log 'Work dammit, work. Arghhh'

  render: ->
    $(@el).html(@template(@model.toJSON() ))    
    return this

РОДИТЕЛЬСКИЙ ВИД

Backbonescaffolddemo.Views.Tasks ||= {}

class Backbonescaffolddemo.Views.Tasks.IndexView extends Backbone.View
  template: JST["backbone/templates/tasks/index"]
  id: "taskList"

  events: 
    "keyup #searchTasks" : "searchTasks"

  initialize: () ->
    _.bindAll(this, 'addOne', 'sortable', 'task_id_from_element', 'addAll', 'searchTasks', 'updateSort', 'sortable', 'render')
    @options.tasks.bind('reset', @addAll)
    @options.tasks.bind('reset', @sortable)
    @options.tasks.bind('add', @render)
    @updateSort()
    @sortable()

  #...

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

  addOne: (task) ->
    view = new Backbonescaffolddemo.Views.Tasks.TaskView({model: task})
    $(@el).append(view.render().el)

  render: ->
    $(@el).html(@template(tasks: @options.tasks.toJSON() ))
    @addAll() 
    return this

Ответы [ 2 ]

1 голос
/ 30 декабря 2011

Ааа - нашел. Прямой «щелчок»: «demoMethod» (без указанной области действия DOM) выполняет свою работу.

0 голосов
/ 30 декабря 2011

Я не вижу, куда вы добавляете div, который оборачивает TaskView.

По умолчанию представления Backbone заключены в div, но, поскольку вы установите tagName в TaskView на li, он будет заключен в li, а не div.

...