3

マリオネット itemview (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:複合ビューのパラメーターも変更されましitemViewitemViewContainerchildViewchildViewContainer

于 2015-04-24T17:56:55.960 に答える