在extjs 3.4中刷新Panel中的数据视图

时间:2014-08-28 00:11:10

标签: javascript jquery extjs extjs3

我有一个包含Panel项的extjs dataview组件。我用它来显示商店的图像。它在第一次加载时按预期工作。但是后来当我用新图像url(当用户搜索并加载不同的城市时发生)重新加载imgStore时,视图不会刷新。有人指出我刷新关联数据存储区时刷新panel/dataview项目的最佳方法吗?

实际代码在面板中有多个项目以及许多其他按钮和工具栏。请参阅以下代码的相关部分:

init: function() {

    // image store
    this.imgStore = new Ext.data.JsonStore({
        idProperty: 'imgId',
        fields: [{
            name: 'imgId',
            type: 'integer',
            mapping: 'imgId'
        }, {
            name: 'url',
            mapping: 'url'
        }],
        data: [],
    });

    // load images          
    Ext.each(myImgStore.data.items, function(itm, i, all) {
        this.imgStore.loadData(itm.data, true);
    });

    // add to a dataview in a panel
    this.myPanel = new Ext.Panel({
        autoScroll: true,
        items: [{
            xtype: 'dataview',
            store: this.imgStore,
            autoScroll: true,
            id: 'imgList',
            tpl: new Ext.XTemplate(
                '<ul class="imgGrid">',
                '<tpl for=".">',
                '<li>',
                '<div class=\"imgThumbnail\" imgId="{imgId}">',
                '<img src="{url}"/>',
                '</div>',
                '</li>',
                '</tpl>',
                '</ul>',
                '<div class="x-clear"></div>'
            ),
            listeners: {
                afterrender: function() {
                    // do something                          
                }
            }
        }]
    });
    // add this to the center region of parentpanel
    Ext.getCmp('parentPanel').add([this.myPanel]);
    this.myPanel.doLayout();
}

每次重新加载商店时,我都希望刷新数据视图。我使用的是extjs 3.4版本。

谢谢!

1 个答案:

答案 0 :(得分:2)

您需要refresh您的数据视图。我建议把它变成一个变量。

var dataView = new Ext.DataView({
    store: this.imgStore,
    autoScroll: true,
    id: 'imgList',
    tpl: new Ext.XTemplate(
        .
        .
        .
    ),
    listeners: {
        afterrender: function() {
            // do something                          
        }
    }
});

然后在商店中添加一个监听器:

this.imgStore = new Ext.data.JsonStore({
    idProperty: 'imgId',
    fields: [{
        name: 'imgId',
        type: 'integer',
        mapping: 'imgId'
    }, {
        name: 'url',
        mapping: 'url'
    }],
    data: []
});

// Define your dataView here

this.imgStore.on('load', function() {
    dataView.refresh();    
});

注意:代码未经过测试。