在Marionette Itemview中没有触发事件

时间:2013-05-01 06:50:26

标签: events triggers marionette

我试图在牵线木偶项目视图(List.SendQuestion)中触发事件,但是,我无法在控制器中注册触发器(如下所示)

基本上,在点击'a.send'之后,应该发生一个触发器,'send_qn_view'应该捕获事件并打印出'triggered'消息。但那并没有发生。

有人可以告诉我这里可能出现的问题吗?

@Dailymuses.module "SidebarModule.List", (List, App, Backbone, Marionette, $, _) ->
  List.Controller = 
    showSidebar: ->
      send_qn_view = new List.SendQuestions
        collection: Onethingaday.Public.friends

      send_qn_view.on "itemview:ask:user", (itemview, question) ->
        console.log('triggered') #THIS IS NOT EXECUTED

  class List.SendQuestion extends Marionette.ItemView
    template: "sidebar/list/templates/send_question"
    className: 'qn_askee'
    tagName: 'li'

    events:
      "click a.send" : "sendQuestion"

    sendQuestion: (e) ->
      e.preventDefault()
      debugger #this debugger was triggered
      @trigger "ask:user", @model

  class List.SendQuestions extends Marionette.CompositeView
    template: "sidebar/list/templates/send_questions"
    itemView: List.SendQuestion
    itemViewContainer: "ul.friends"

2 个答案:

答案 0 :(得分:7)

编辑:更正了我的答案并更新了我的小提琴

很抱歉。您的事件冒泡语法是正确的。 https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.collectionview.md#childview-event-bubbling-from-child-views

  

“itemview:*”从子视图冒泡的事件

     

当集合视图中的项视图触发事件时,即   事件将通过父集合视图冒泡   “itemview:”前置于事件名称。

     

也就是说,如果子视图触发“do:something”,则父视图   然后,集合视图将触发“itemview:do:something”。

需要注意的事项。木偶支持视图触发器。如果您的回调只是触发视图事件,您可以删除事件哈希和回调并将代码缩短为:

triggers: {
  "click a.send": "ask:user"
}

http://lostechies.com/derickbailey/2012/05/15/workflow-in-backbone-apps-triggering-view-events-from-dom-events/

小提琴: http://jsfiddle.net/FRHkt/1/

答案 1 :(得分:4)

对于这个例子的新人来说,使用Marionette 2.x,itemview:*的子视图已被父视图中的childview:触发器替换,并且集合和复合视图也有他们的参数已从itemViewitemViewContainer更改为childViewchildViewContainer