2012-12-18 4 views
0

Я пытаюсь добавить разные таблицы {Табличный вид или Просмотр диаграммы} в таблице. Каждый может иметь свои собственные данные. Я использую Backbone Marionette для этого и имею следующую строку кода. Но представление позиции не отображается.Как присоединить экземпляры ItemView во время выполнения к Backbone.marionette.Composite View

HTML

<script id="grid-template" type="text/template"> 
<div> 
    Data is displayed using Tabular View and Chart View ! 

    </div> 
</script> 

<script id="TabularViewTemplate" type="text/template"> 


    <table><tr><td>Value1</td><td>Value2</td></tr>   </table> 

</script> 

<script id="ChartTemplate" type="text/template"> 

    <table><tr><td>Value1</td><td>Value2</td></tr>   </table> 

</script> 


<div id="grid"> 
</div> 
​ 

JS

var ANBaseModel= Backbone.Model.extend({ 

    name:"", 
    type:"" 
}); 

    var SSANModel= ANBaseModel.extend({ 
     type:"SS" 
}); 



var BaseView=Backbone.Marionette.ItemView.extend({ 
template: "#row-template", 
    tagName: "tr" , 
    model:SSANModel 





}); 
// A Spreadsheet View 
var SSView= BaseView.extend({ 


    render: function(){ 
    alert(this.model.type); 
    if(this.model.type=="SS") 
    alert("Spreadsheet"); 
     else if(this.model.type=="ChartAN") 
       alert("Chart"); 

    } 

}); 

// A Chart View 
var ChartView = BaseView.extend({ 


    render: function(){ 
    alert(this.model.type); 
    if(this.model.type=="SS") 
    alert("Spreadsheet"); 
     else if(this.model.type=="ChartAN") 
       alert("Chart"); 

    } 

}); 

// The grid view 
var GridView = Backbone.Marionette.CompositeView.extend({ 
    tagName: "table", 
    template: "#grid-template", 



}); 



var SS= new SSANModel(); 
alert(SS.type); 
var objSSView=new SSView ({model:SS,template:"TabularViewTemplate"}); 

var gridView = new GridView({ 

    itemView: objSSView 
}); 


gridView.render(); 

console.log(gridView.el); 
$("#grid").html(gridView.el); 

JsFiddle: http://jsfiddle.net/Irfanmunir/ABdFj/

Как я могу присоединить ItemView экземпляры к составным View. Используя это, я могу создавать разные представления, имеющие свои собственные данные. Я не использую сбор для композитного представления.

С уважением,

ответ

1

Ну вы должны создать коллекцию с вашими моделями и передать его в качестве аргумента при создании GridView:

var gridView = new GridView({ 
    collection: SSCollection, 
    itemView: objSSView 
}); 

Каждая модель коллекции будет новый istance из определенных itemView.

Вы также должны сказать вам CompositeView куда ставить itemViews:

appendHtml: function(collectionView, itemView, index){ 
     collectionView.$("tbody").append(itemView.el); 
}, 

Вы также можете попробовать использовать метод использования buildItemView:

buildItemView: function(item, ItemViewType, itemViewOptions){ 
    var options = _.extend({model: item}, itemViewOptions); 

    switch(item.type){ 
     case 'ss': 
      ItemViewType = SSView; 
     case 'another': 
      ItemViewType = AnotherView; 
    } 
    var view = new ItemViewType(options); 
    return view; 
}, 
+0

Это не будет работать, как я имеют разные взгляды на каждая модель. И я не нахожу никаких способов добавить экземпляр представления в Marionette.CollectionView во время выполнения. Мне кажется, что Backbone.marionette.Composite View или Marionette.CollectionView поддерживает только один вид просмотров. –

+0

Вы можете попробовать с помощью метода buildItemView: [marionette docs] (https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.collectionview.md#collectionviews-builditemview) – Ingro

+0

Я пытался, но был получение ошибки, в то время как usin buildItemView. Можете ли вы опубликовать фрагмент кода. –

 Смежные вопросы

  • Нет связанных вопросов^_^