Попробуйте это:
class DashboardView extends Backbone.View
constructor: ->
@collection.each ( w ) =>
dv = new app.WidgetView( model: w )
@$el.append dv.render().el // Append widget's @el explicitly
class WidgetView extends Backbone.View
tagName: 'div' // or whatever your view's root element is
template: _.template $( "#widget-template" ).html() // pre-compile template
events:
"click .config": "config_widget"
render: ->
@$el.html @template @model.toJSON() // append template to @el
return this // return view
Итак, идея такова:
(1) Внутри метода WidgetView
render
вы заполняете @el
(корневой элемент представления) данными своей модели через шаблон. (И обратите внимание, как я компилирую шаблон только один раз - нет необходимости компилировать шаблон при каждой операции рендеринга.)
(2) Внутри DashboardView
вы добавляете корневой элемент виджета - @el
- в DOM.
Дело в том, что события представления делегируются его корневому элементу - @el
. Поэтому вы хотите явно работать с корневым элементом: внутри render
вы заполняете его, а затем добавляете его в DOM.