如何在ext js4中选择选项卡时呈现不同的视图?

时间:2013-01-09 11:13:59

标签: php extjs extjs4

1)我有一个json文件,我想在视图中显示。

{           
    "contents": [
                {
                    "title":'JWorld',
                    "image":'image/e-learning/elearning.png',

                    "subtitle":[
                    {
                        "categories":'Aus',
                    },
                    {
                        "categories":'England',
                    }                
                    ]
                },
                {
                    "title":'JIndia',
                    "image":'image/Content/History_of_India.jpg',
                    "subtitle":[
                    {
                        "categories":'History',
                    },
                    {
                        "categories":'India palace',
                    }                
                    ]
                },
                {
                    "title":'JMaharastra',
                    "image":'image/Content/Geography.jpg',
                    "subtitle":[
                    {
                        "categories":'History Maharastra',
                    },
                    {
                        "categories":'Maharastra Heros',
                    }                
                    ]
                }
              ]
}

2)我的观点文件: -

Ext.define('Balaee.view.kp.dnycontentcategories.ContentcategoriesView',
{
    extend:'Ext.view.View',
    id:'contentcategoriesViewId',
    alias:'widget.ContentcategoriesView',
    store:'kp.DnycontentcategoriesStore',
    config:
    {
        tpl:'<tpl for="0">'+
                '<div class="main">'+
                '</br>'+
                '<b>{title}</b></br>'+
                '<img src={image} hight="50" width="100"></br>'+
                '</div>'+
                '</tpl>',
        itemSelector:'div.main',
    }
});// End of class

3)我正在使用选项卡面板并使用json文件在其中动态添加标签。

Ext.define('Balaee.view.kp.dnycontentcategories.Contentcategories',{
    extend:'Ext.tab.Panel',
    requires:[
              'Balaee.view.kp.dnycontentcategories.ContentcategoriesView','Balaee.view.kp.dnycontentcategories.ContentcategoriesView1'
             ],
    id:'contentcategoriesId',
    alias:'widget.Contentcategories',
    height:500,
    items:[

    ],//end of items square
});// End of login class

4)我的商店档案: -

Ext.define('Balaee.store.kp.DnycontentcategoriesStore',{
    extend: 'Ext.data.Store',
    model: 'Balaee.model.kp.DnycontentcategoriesModel',
    autoLoad:true,
//    filters: [{
//        property: 'title',
//    }],
    proxy:
    {
        type:'ajax',
        api:
        {
            read:'data/content.json',
            //create: ,
            //update: ,
            //destroy: ,
        },//End of api 
        reader:
        {
            type:'json',
            root:'contents',
            //successProperty: ,
        }//End of reader
    }//End of proxy
});//End 

5)我的Controller文件有些代码 在这里我动态添加json文件中的一些选项卡。选择特定选项卡我想从json文件中获取不同的特定值。但我得到第一个标签的相同视图。我该如何解决这个问题。

init: function(){
    console.log("inside content controller");
    this.control({
        'Contentcategories':
        {
            render:this.renderFunction,
        }
    });//End of control
},//End of init() function
renderFunction:function(){
    console.log("Inside render function");
    var tabPanel = Ext.getCmp('contentcategoriesId');       // tabpanel  
    var tabPanelView = Ext.getCmp('contentcategoriesViewId');   // tabpanel view

    var storeObject= this.getStore('kp.DnycontentcategoriesStore'); // store
    storeObject.on('load',function(){
        storeObject.each(function(model){
            //tabPanelView.store().filter('title',model.get('title')),
            console.log(model.get('title'));
            console.log(model.get('categories'));
            tabPanel.add({title:model.get('title'),
                            id:model.get('title'),
                            //html:"<image src=model.get('image')>",
                            xtype:'ContentcategoriesView',              
                        }); //End of add function 
        });// End of storeObject function
        tabPanel.setActiveTab(0);
    });
},// End of render function 
请给我一些建议。

1 个答案:

答案 0 :(得分:0)

您的代码存在一些问题。

您定义ContentcategoriesView - 它是您扩展的组件;但是你给它一个id(contentcategoriesId)但你正在创建多个这些组件 - 这没有意义,因为每个组件实例的id必须是唯一的。

然后,您将商店附加到此视图,这意味着所有组件都将呈现相同的内容。

如果我理解正确,您希望json中的每个条目成为不同的标签。

我会采取这个方向(代码没有经过测试,但应该给你一个方向):

Ext.define('Balaee.view.kp.dnycontentcategories.ContentcategoriesView',
{
    extend:'Ext.panel.Panel', // Notice it's a panel.
    alias:'widget.ContentcategoriesView',

    config:
    {
        tpl: '<div class="main">' +
             '</br>' +
             '<b>{title}</b></br>' +
             '<img src={image} hight="50" width="100"></br>' +
             '</div>'
        itemSelector:'div.main',
    }
});

然后:

storeObject.on( 'load',function() {
    storeObject.each( function( model ) {
        tabPanel.add({
            xtype: 'ContentcategoriesView',
            title: model.get( 'title' ),
            id:    model.get( 'title' ),
            data:  model
        }); 
    });
    tabPanel.setActiveTab(0);
});