Tengo una vista llamada DashboardView
que crea varias instancias WidgetView
s. Cada widget necesita tener sus propios enlaces de eventos. Por lo que yo puedo decir, estos enlaces se pierden cuando la vista se representa y se añade a la vista padre, es decir:Eventos en vistas anidadas de Backbone.js
class DashboardView extends Backbone.View
constructor: ->
context = @
_.each @collection, (w)->
dv = new app.WidgetView(model: w)
context.$el.append(dv.render())
class WidgetView extends Backbone.View
events:
"click .config" : "config_widget"
render: ->
_.template($("#widget-template").html(), @model)
Hacerlo de esta manera, los eventos de clic sobre el elemento .config
del widget se han perdido . ¿Hay una mejor manera de mezclar las vistas anidadas en el elemento primario mientras se asegura que los controladores de eventos en la vista secundaria se canalicen correctamente?
Una solución que he visto para este problema viene en this article. Esto se ve bien, pero tengo curiosidad si hay una forma más elegante de resolver esto.
Esto es exactamente lo que estaba buscando. ¡Gracias! – picardo
Puede evitar las cosas 'context' utilizando [' (w) => '] (http://coffeescript.org/#fat_arrow). Y '@ collection' debe tener un subrayado ya que '@collection.each (w) =>' es otra opción. –
@mu Cool ':)' No sabía acerca de la flecha adiposa. –