0

ああ、私はすでに解決策を見つけました...下にスクロールして表示します。

バックボーン マリオネットで解決策が見つからない問題が発生しています。

ネストされたビュー構造を構築して、Twitter Bootstrap で使用されているようなアコーディオン ビューを表示します。これは、ItemView を別の CompositeView (アコーディオン グループ) に設定し、ItemView をItemView (アコーディオン グループ アイテム)。それは正常に表示され、機能します。これはソースの単純化されたコピーです (アプリケーションの別の場所に抽象的なアコーディオン ビューがありますが、これは構造を把握するためのものです)。

外側のアコーディオン:

    // Marionette CompositeView 
    Accordion.View = app.Common.View.Component.Accordion.View.extend({
        tagName : 'div',
        className : 'accordion',
        itemViewContainer : 'div.accordion-groups',
        template: '#accordion_template',
        itemView : Accordion.ViewGroup,
        emptyView : Accordion.ViewEmpty
    });

アコーディオン グループごとに表示するビュー:

    // Marionette CompositeView 
    Accordion.ViewGroup = app.Common.View.Component.Accordion.ViewGroup.extend({
        tagName : 'div',
        className : 'accordion-group',
        itemViewContainer : 'ul',
        template: '#accordion_template_group',
        itemView : Accordion.ViewGroupItem,
        emptyView : Accordion.ViewGroupEmpty
    });

    // Marionette ItemView  
    Accordion.ViewEmpty = app.Common.View.Component.Accordion.ViewEmpty.extend({
        template: '#accordion_template_empty'
    });

グループ内で表示するアイテム:

    // Marionette ItemView  
    Accordion.ViewGroupItem = app.Common.View.Component.Accordion.ViewGroupItem.extend({
        triggers : {
            'mouseover' : 'mouseover'
        },
        template: '#accordion_template_group_item',
        tagName : 'li'
    });

    // Marionette ItemView  
    Accordion.ViewGroupEmpty = app.Common.View.Component.Accordion.ViewGroupEmpty.extend({
        template: '#accordion_template_group_empty',
        tagName : 'li'
    });

グループ内のアコーディオン アイテムの上にマウスを移動すると、最下位レベルでmouseover、中央の CompositeView でitemview:mouseover、外側の CompositeViewで itemview:itemview: mouseoverという名前のトリガーが起動されます。これらは何が起こっているかを特に説明するものではないので、トリガー名を変更したいと思います。私には簡単そうに見えますが、うまくやり遂げることができず、何かを見落としているような気がします。

私が達成したいことは次のとおりです。最も深くネストされた ItemView 内でイベントがトリガーされると、たとえば上記の「mouseover」のように、モデルをデータとしてgroup:item:mousoverという名前のトリガーを最も外側の CompositeView で起動させたいと考えています。この場合、アコーディオン ビューを別のビューの下にネストすると、より意味のある名前が付けられます。

あなたの誰かが助けてくれることを願っています。ありがとう!

--

今のところの解決策:

    Accordion.View = app.Common.View.Component.Accordion.View.extend({
        tagName : 'div',
        className : 'accordion',
        itemViewContainer : 'div.accordion-groups',
        template: 'common/view/entitycomponent/set/accordion/accordion_template',
        itemView : Accordion.ViewGroup,
        emptyView : Accordion.ViewEmpty,

        // I've added the following
        onCompositeRendered : function() {
            this.on('itemview:itemview:mouseover',function(view) {
                this.trigger('group:item:mouseover',view);
            });
        }
    });
4

1 に答える 1