2013-08-27 51 views
0

Aaaargh我找到了一個解決方案...滾動到底部查看。從Backbone.Marionette中嵌套複合視圖捕獲事件

我遇到了Backbone Marionette的問題,我似乎無法找到解決方案。

我建立了一個嵌套視圖結構顯示手風琴視圖像在Twitter的引導,其由外CompositeView中的(手風琴外),它有ItemView控件設置爲另一個CompositeView中(手風琴組),這反過來又具有其使用ItemView設置爲ItemView(Accordion組項目)。它顯示和功能正常。這是源的簡化副本(我在我的應用程序有一個抽象手風琴視圖別的地方,但是這只是爲了獲得結構的想法):

外手風琴:

// 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' 
    }); 

將鼠標懸停在一個手風琴項的組中,在觸發器會導致激發命名鼠標懸停上的最低水平,ItemView控件:鼠標懸停在中間CompositeView中和ItemView控件:ItemView控件:鼠標懸停在外CompositeView中。這些對發生的事情沒有特別的描述,所以我想更改觸發器名稱。對我而言,這看起來很簡單,但我無法正確完成,而且我有這種感覺,我忽略了一些東西。

我想達到的是以下幾點。當最深層嵌套的ItemView中觸發事件時,例如上面所示的'mouseover',我想讓最外層的CompositeView觸發一個觸發器,例如命名爲組:項目:mousover與模型作爲數據。在這種情況下,如果我在另一種觀點下嵌套手風琴觀點,它將會有更顯着的名字。

希望你們任何人都能幫忙。謝謝!

-

解決方案現在:

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); 
      }); 
     } 
    }); 

回答

0

您bascially有2個選項:

+0

啊,謝謝。這第一個選項基本上和我已經發現的一樣。我遇到的問題也是我必須在渲染合成視圖後添加偵聽器。只需在複合視圖中添加「事件」散列就沒有用。 – Vanderstaaij

相關問題