Grid EXTJS4:多个网格显示来自同一存储区但每个网格具有不同记录的数据的方法

Grid EXTJS4:多个网格显示来自同一存储区但每个网格具有不同记录的数据的方法,grid,extjs4,Grid,Extjs4,假设在单个页面上有两个网格,它们具有相同的列,但要显示的记录不同 可以有两种解决方案: 渲染网格之前,请使用相同的模型并在存储上进行存储和过滤。 此解决方案中的潜在问题:由于底层存储相同,第二个网格将在何时运行 在第一个网格上渲染的过滤器将被擦除 使用不同的存储定义和模型定义(保持代理和字段与其他存储/模型定义相同,但只是更改名称): 问题:我在潘多拉应用程序上尝试了这个方法,它开始出现奇怪的问题,以至于第二个网格没有显示任何记录 哪种方法更好,以及如何解决相应的问题 -谢谢我采取并推荐的方法不

假设在单个页面上有两个网格,它们具有相同的列,但要显示的记录不同

可以有两种解决方案:

  • 渲染网格之前,请使用相同的模型并在存储上进行存储和过滤。 此解决方案中的潜在问题:由于底层存储相同,第二个网格将在何时运行 在第一个网格上渲染的过滤器将被擦除

  • 使用不同的存储定义和模型定义(保持代理和字段与其他存储/模型定义相同,但只是更改名称): 问题:我在潘多拉应用程序上尝试了这个方法,它开始出现奇怪的问题,以至于第二个网格没有显示任何记录

  • 哪种方法更好,以及如何解决相应的问题


    -谢谢

    我采取并推荐的方法不是引用同一个商店实例,而是为每个网格创建一个新的商店实例:


    store:Ext.create('MyStore',{…})

    我们在项目中遇到了完全相同的问题。我最终采用了以下方法:

    • 您可以定义一个模型和一个存储类
    • 从服务器为第一个网格加载存储
    • 使用所有记录克隆存储对象(您可能想通过google了解具体的操作方法)
    • 此时,您需要决定是只需要一个本地副本,还是需要绑定到服务器上相同数据源的副本—这两个副本都可以根据您的需要实现
    如果您需要,我可以发布一些克隆的示例代码

    更新

    以下是克隆存储对象的代码示例:

    cloneStore: function(store, storeClass) {
        var new_st = Ext.create(storeClass),
            recs = [],
            filter;
    
        store.each(function(r) {
            recs.push(r.copy)}
        );
        new_st.add(recs);
    
        return new_st;
    },
    

    沙的方法肯定不是好的。。。这是可行的,但这不是实现这一目标的最佳方式!我也推荐DmitryB的解决方案。如果第二个网格没有加载,可能您忘记在第二个存储上调用load()?看起来唯一的方法是创建另一个存储??嗯…“如果你需要的话,我可以发布一些用于克隆的示例代码。”:我知道这是旧的,但我想看看一些代码?