ExtJS 4.1如何动态创建带网格的窗口

时间:2012-12-13 12:56:50

标签: extjs grid extjs4 window

我是一个新的ExtJS用户,我有一个问题。

我有一个带汽车的商店,我创建了一个带按钮的菜单,可以按品牌或型号查看所有汽车 现在我想显示一个带有网格面板的窗口,其中包含我所有特定品牌/型号的汽车。 实际上,当我创建我的按钮时,我这样做:

var aCarButton = Ext.create('Ext.Button', {
    text: aTextButton,
    handler: function() {
        var aResultWindow = new ResultWindow(aTextButton, myCarStore, 'Brand', aBrandValue);
        aResultWindow.create();
    }
});
aMenuPanel.add(aCarButton);

对于我的功能,我这样做:

function ResultWindow(aTitle, aStore, aFilter, aFilterValue) {
    this.myTitle = aTitle;
    this.myStore = aStore;
    this.myFilter = aFilter;
    this.myFilterValue = aFilterValue;
    this.myStore.filter(aFilter, aFilterValue); 
}

ResultWindow.prototype.create = function() {
    var grid = Ext.create('Ext.grid.Panel', {
        store: this.myStore,
        columns: [
            ...
        ]
    });
    var window = Ext.create('Ext.window.Window', {
        layout: 'fit',
        maximizable: true,
        title: this.myTitle,
        items: [ grid ],
        width: 1024,
        height: 768
    });
    window.show();
}

首先,我不确定这是展示我想要的最佳方式 其次,我有一个显示所有车辆的按钮(没有过滤器),但大约需要2分钟才能显示我的所有12000记录。

所以我的第一个问题是要知道我的解决方案显示我想要的是正确的吗? 我的第二个问题是否可以更快地显示所有车辆?

PS:如果我犯了一些错误,抱歉我的英文。

1 个答案:

答案 0 :(得分:3)

这当然是一种方法,但我不认为这是在Ext中做到这一点的最好方法,我会在这些方面做点什么:

var aCarButton = Ext.create('Ext.Button', {
text: aTextButton,
handler: function() {
        myCarStore.filter('Brand', aBrandvalue);
        var win = Ext.create("Ext.window.Window", {
            title: aTextButton,
            layout: 'fit',
            maximizable: true,
            width: 1024,
            height: 768,
            items:[{
                xtype: 'grid',
                store: myCarStore,
                columns: [
                    ...
                ]
            }]
        });
        win.show();
});
aMenuPanel.add(aCarButton);

我只是为了示例而声明Window inline,我可能会选择包含网格的自定义窗口和一些自定义函数来过滤网格,但重点是:您不需要在这里弄乱原型,没有必要真的,如果你想要的是控制你的Window的创建方式,那么define就像这样:

Ext.define("CarsWindow", {
    extend: 'Ext.window.Window',
    items:[
        ...
    ],
    filterByBrand: function(brandValue){
        this.down('grid').getStore().filter('Brand', brandValue);
    },
    ...
});

然后你可以通过以下方式实例化它:

Ext.create("CarsWindow", { title: 'YourTitle', ...}).show();

对于第二个问题,有一种方法可以在Ext中显示大型数据集而不会失去太多性能,您可以在商店定义上设置buffered: true,然后再调用'store.loadPage(1)'在此:store.buffered

希望有所帮助。