3

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

本质上,在单击“a.send”后,应该会发生触发器,并且“send_qn_view”应该捕获事件并打印出“已触发”消息。但那并没有发生。

有人可以告诉我这里可能出了什么问题吗?

@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"
4

2 回答 2

8

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

对于那个很抱歉。您的事件冒泡语法是正确的。 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”。

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

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/

于 2013-05-01T13:06:09.490 回答
4

对于刚接触此示例的任何人,在 Marionette 2.x 中,itemview:*子视图已替换childview:为父视图中的触发器,并且集合和复合视图的参数也已更改 fromitemViewitemViewContainertochildViewchildViewContainer

于 2015-04-24T17:56:55.960 回答