extJS 5.0根据选项卡选择绑定不同的商店

时间:2017-11-08 19:19:39

标签: extjs extjs5

寻找有关如何根据所选标签动态加载来自其他数据存储区的数据的建议。

两个商店都有相同的列名,因此不需要更改加载dataIndex。

当选择“当前”选项卡时,我想将商店绑定为“当前”

当选择“已完成”标签时,我想绑定商店“已完成”

我的代码示例如下:

viewModel: {
    formulas: {
                activeStore: function(get) {
                    var active = get('active');
                    return this.getStore(active == 'aTab' ? 'a' : 'b');
                }           
    },
    data: {
        active: 'aTab'
    },
    stores: {
        a: 'Change',
        b: 'ChangeArchive',
    }
},
{   
            xtype: 'tabpanel',
            id: 'changetabs',
            tabBarHeaderPosition: 1,
            headerPosition: 'top',
            plain: true,
            width: 480,
            height: 30,
            items: [{ 
                title: 'Current',
                itemId: 'aTab'
                },
                {
                title: 'Completed',
                itemId: 'bTab'
                }
            ],
            listeners: {
                tabchange: function(tabPanel, newTab) {
                    tabPanel.ownerCt.getViewModel().set('active', newTab.getItemId());
                }
            }
},

和网格

{
    region: 'west',
    xtype: 'grid',
    bind: {store: '{activeStore}'},
    viewConfig: {
        markDirty: false
    },
    id: 'ActionList',
    columns: {
        items: [
            { text: 'Action', dataIndex: 'action_id', width: 300},
            { text: 'Status', dataIndex: 'status', width: 180},
        ]
    },
    listeners: {
        select: 'onSelectAction'
    }
}

1 个答案:

答案 0 :(得分:1)

您应该使用公式:

Ext.define('Foo', {
    extend: 'Ext.data.Model'
});

Ext.application({
    name : 'Fiddle',

    launch : function() {
        new Ext.container.Viewport({
            layout: 'border',
            viewModel: {
                formulas: {
                    activeStore: function(get) {
                        var active = get('active');
                        return this.getStore(active == 'aTab' ? 'a' : 'b');
                    }
                },
                data: {
                    active: 'aTab'
                },
                stores: {
                    a: {
                        model: 'Foo',
                        data: [{
                            foo: 1
                        }]
                    },
                    b: {
                        model: 'Foo',
                        data: [{
                            foo: 2
                        }]
                    }
                }
            },
            items: [{
                region: 'west',
                xtype: 'grid',
                width: 200,
                bind: '{activeStore}',
                columns: [{
                    dataIndex: 'foo'
                }]
            }, {
                region: 'center',
                xtype: 'tabpanel',
                items: [{
                    title: 'A',
                    itemId: 'aTab'
                }, {
                    title: 'B',
                    itemId: 'bTab'
                }],
                listeners: {
                    tabchange: function(tabPanel, newTab) {
                        tabPanel.ownerCt.getViewModel().set('active', newTab.getItemId());
                    }
                }
            }]
        });
    }
});

Fiddle