Javascript 动态事件?
没有用,那里的样品对我也不起作用。我似乎无法让jQuery的Javascript 动态事件?,javascript,backbone.js,coffeescript,marionette,Javascript,Backbone.js,Coffeescript,Marionette,没有用,那里的样品对我也不起作用。我似乎无法让jQuery的委托正常工作 是未正确动态声明事件的JSFIDLE。我该怎么做 小提琴里发生了什么 动态事件的覆盖: Backbone.View::addEvents = (events) -> @delegateEvents _.extend(_.clone(@events), events) 用于聚合DOM选择器/事件的类,因此我们只声明它们的HTML对应项一次: class Els constructor: () ->
委托正常工作
是未正确动态声明事件的JSFIDLE。我该怎么做
小提琴里发生了什么
动态事件的覆盖:
Backbone.View::addEvents = (events) ->
@delegateEvents _.extend(_.clone(@events), events)
用于聚合DOM选择器/事件的类,因此我们只声明它们的HTML对应项一次:
class Els
constructor: () ->
@signupButton = 'button#signup'
events: () ->
events = { }
events['click ' + @signupButton] = 'clickSignup'
events
处理DOM操作的类:
class UI extends Backbone.Model
disableButton: () ->
$(els.signupButton).addClass('disabled')
木偶视图:
class MyRegion extends Backbone.Marionette.Region
el: '#default-region'
class MyLayout extends Backbone.Marionette.Layout
template: '#template-layout'
regions:
content: '#region-content'
#events:
#'click button#signup': 'clickSignup'
initialize: (options) ->
# This seems correct
alert JSON.stringify(options.dynamicEvents)
# FAIL!
@addEvents options.dynamicEvents
close: () ->
@remove()
@unbind()
clickSignup: (event) ->
ui.disableButton()
应用程序启动:
els = new Els()
ui = new UI()
app = new Backbone.Marionette.Application()
app.start { }
region = new MyRegion()
region.show new MyLayout(
dynamicEvents: els.events()
)
如果我还可以在Els
中声明事件绑定,那就太棒了,例如:
class Els
constructor: () ->
@signupButton = 'button#signup'
events: () ->
events = { }
events['click ' + @signupButton] = (event) ->
ui.disableButton()
events
我真的应该使用EventEmitter,但示例假定所有内容都已实例化。这与预期一样有效
Backbone.View::addEvents = (events) ->
@events = _.extend @events or {}, events
@delegateEvents()
这可能会无意中修改类的事件
,而不仅仅是实例的()。您可能希望@events=.{}。改为扩展(@events,events)
。谢谢!编辑答案@rdiazv?