2013-05-01 49 views
3

我試圖觸發木偶ItemView控件(List.SendQuestion)的事件,但是,我無法登記在控制器中的觸發器(如下圖所示)事件在木偶不觸發ItemView控件

從本質上講,後點擊'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" 

回答

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/

+0

感謝您的回覆和提示。非常感謝=) – Zhen 2013-05-01 19:31:13

+0

還有一個問題,如何在觸發期間添加模型作爲參數? – Zhen 2013-05-01 20:12:00

+0

對不起,我意識到在你的小提琴中,觸發事件被放置在集合視圖中。在我原來的文章中,我遇到的問題實際上是在'itemView'中有一個觸發事件,即在您的var PatchView中。我怎樣才能從itemView觸發事件呢? – Zhen 2013-05-01 20:18:56

4

對於任何新來這例如,Marionette 2.x,itemview:*在子視圖中已被替換爲childview:觸發器,並且收集視圖和合成視圖的參數也從itemViewitemViewContainerchildViewchildViewContainer