Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 动态事件?_Javascript_Backbone.js_Coffeescript_Marionette - Fatal编程技术网

Javascript 动态事件?

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: () ->

没有用,那里的样品对我也不起作用。我似乎无法让jQuery的
委托正常工作

是未正确动态声明事件的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?