我试图在牵线木偶项目视图(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"
答案 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"
}
答案 1 :(得分:4)
对于这个例子的新人来说,使用Marionette 2.x,itemview:*
的子视图已被父视图中的childview:
触发器替换,并且集合和复合视图也有他们的参数已从itemView
和itemViewContainer
更改为childView
和childViewContainer