extjs 动态存储模型网格列

     2023-03-16     66

关键词:

【中文标题】extjs 动态存储模型网格列【英文标题】:extjs dynamic store model grid columns 【发布时间】:2015-03-30 09:41:47 【问题描述】:

我遇到了一个奇怪的问题。我正在建立一个商店并调用加载函数。当存储加载时,我根据结果创建一个列模型,然后将该存储传递到网格中并调用 reconfigure()。网格看起来显示了正确的行数,列标题正确,但单元格中的实际数据为空白。但是,如果我在重新配置后调用 grid.getStore().load() (这很糟糕,因为我已经加载了商店),数据会正确显示。有人知道为什么会这样吗?相关代码的sn-p如下。

 dynStore.load(
        callback: function(records, operation, success) 
            if (records && records.length) 
                var dynStore = Ext.getStore('DynamicReportGeneratorResults');
                var modelFields = [];
                var dynamicColumns = [];
                var sampleRow = records[0].raw;
                Ext.Object.each(sampleRow, function (key, value) 
                    modelFields.push(key);
                    var dynColObj = text: key, dataIndex: key;
                    if (key == "id") 
                        dynColObj.hidden = true;
                    
                    dynamicColumns.push(dynColObj);
                );
                dynStore.model.setFields(modelFields);
                var config = 'reportName': this['currentReportName'];
                var reportResultWindow = Ext.create('Rms.view.DynamicReportGeneratorReportResultsWindow', config);
                reportResultWindow.show();
                this.getDynamicReportResultsGrid().reconfigure(dynStore, dynamicColumns);
/////*******    
//this next line is stupid since the store is already loaded with data
/////*******
                this.getDynamicReportResultsGrid().getStore().load();
            
            else 
                Ext.Msg.alert("Report Resuts", "No results from this report");
        
,

【问题讨论】:

你能从你的服务器发布一些数据对象吗? 【参考方案1】:

为什么你不使用加载数据方法? 你有数据和一切,所以加载这些数据:

 #YOUR_STORE.loadData( records, false );

作为

 this.getDynamicReportResultsGrid().getStore().loadData( records, false );

请参考sencha docs。

【讨论】:

感谢您的回复。我试过了,但它对我不起作用。结果相同,网格弹出 x 个空白行(空白行数是我在事件侦听器的记录中的结果数)... 关于此的新数据...当我检查加载后调用的函数中的存储...在 store.data.items 中,我正确定义了原始值,但“数据”值是未定义的。换句话说... store.data.items[0].raw = fieldOne: 'real value'... 但 store.data.items[0].data = 。当我使用该存储加载网格时,网格显示空白行..如果我调用 store.load 然后将其传递给网格,不仅 store.data.items[0].data 与原始值匹配,网格正确显示数据【参考方案2】:

我遇到过这个问题。我发现 ExtJS 中有一个错误,它在某些没有为网格指定高度的情况下隐藏单元格数据。如果您检查实际生成的 HTML 表格,单元格数据实际上是存在的,但该表格指定了 position: absolute,由于某种原因隐藏了单元格数据。

示例 1 隐藏单元格数据,未指定高度

http://codepen.io/anon/pen/azLWaV?editors=001

;(function(Ext) 
  Ext.onReady(function() 
    console.log("Ext.onReady")

    var store = Ext.create("Ext.data.Store", 
      fields: ["id", "name"]
      ,buffered: true
      ,pageSize: 100
      ,proxy: 
        type: 'rest'
        ,url: '/anon/pen/azLBeY.js'
        reader: 
          type: 'json'
        
      
    )
    store.on("load", function(component, records) 
      console.log("store.load")
      console.log("records:")
      console.log(records)
    )

    var grid = new Ext.create("Ext.grid.Panel", 
      requires: ['Ext.grid.plugin.BufferedRenderer']
      ,plugins: 
        ptype: 'bufferedrenderer'
      
      ,title: "people"
      ,loadMask: true
      ,store: store
      ,columns: [
        text: "id", dataIndex: "id"
        ,text: "name", dataIndex: "name"
      ]
    )
    grid.on("afterrender", function(component) 
      console.log("grid.afterrender")
    )
    grid.render(Ext.getBody())

    store.load()
  )
)(Ext)

示例 2 可见单元格数据,指定高度

http://codepen.io/anon/pen/XJeNQe?editors=001

;(function(Ext) 
  Ext.onReady(function() 
    console.log("Ext.onReady")

    var store = Ext.create("Ext.data.Store", 
      fields: ["id", "name"]
      ,buffered: true
      ,pageSize: 100
      ,proxy: 
        type: 'rest'
        ,url: '/anon/pen/azLBeY.js'
        reader: 
          type: 'json'
        
      
    )
    store.on("load", function(component, records) 
      console.log("store.load")
      console.log("records:")
      console.log(records)
    )

    var grid = new Ext.create("Ext.grid.Panel", 
      requires: ['Ext.grid.plugin.BufferedRenderer']
      ,plugins: 
        ptype: 'bufferedrenderer'
      
      ,title: "people"
      ,height: 200
      ,loadMask: true
      ,store: store
      ,columns: [
        text: "id", dataIndex: "id"
        ,text: "name", dataIndex: "name"
      ]
    )
    grid.on("afterrender", function(component) 
      console.log("grid.afterrender")
    )
    grid.render(Ext.getBody())

    store.load()
  )
)(Ext)

【讨论】:

ExtJS4 - 遍历存储在网格中

...布时间】:2012-04-0603:10:21【问题描述】:我想遍历存储并动态创建网格列。当我在Store的onLoad事件中使用columns.push方法时,我得到了这个错误:“headerCtCfgisundefined”。这是我的代码:Ext.define(\'App.view.UserList\',extend:\ 查看详情

ExtJs 3:如何根据用户网格存储值动态更新网格单元工具提示?

】ExtJs3:如何根据用户网格存储值动态更新网格单元工具提示?【英文标题】:ExtJs3:Howtodynamicallyupdategridcelltooltipbasedonusergridstorevalue?【发布时间】:2013-11-2809:18:10【问题描述】:我有如下工具提示功能functionrenderTip(val,meta,rec,rowI... 查看详情

Ext JS 4.1:网格列中的渲染器参数不起作用

...:我有一个由许多列组成的网格面板,这样的网格由日期存储填充。下面我报告网格的数据存储及其相关的数据模型:Ext.define(\'branch\' 查看详情

ExtJS 6. 将列添加到网格

...:2016-04-1111:49:58【问题描述】:我想在表实例化时向网格动态添加额外的列。因此,我在gridPanel中添加了process功能,并附有以下部分varclmn=xtype:\'checkcolumn\',dataIndex:\'test,editor:xtype:\'checkboxfield\';config.c 查看详情

Extjs,动态过滤网格

】Extjs,动态过滤网格【英文标题】:Extjs,filteringgriddynamically【发布时间】:2013-01-3016:03:02【问题描述】:我正在使用extjs4进行开发。如图所示,我有两个网格,我希望当我单击包含Number1的GridPanel1行时,GridPanel2将仅显示包含Numb... 查看详情

ExtJS:向网格中添加的列插入值

...有一个包含3列[\'name\',\'email\',\'phone\']的网格面板,它的模型有5个字段[\'name\',\'email\',\'phone\',\'property\',\'value\'].我正在寻找的是根据“属性”字段中的项 查看详情

网格面板上的 ExtJs moveAfter 列非常慢

...907:45:02【问题描述】:我有一个网格面板,其中的列可以动态重新排序。我使用以下方法:grid.headerCt.moveAfter但是当我的数组包含很多列时,循环(用于移动列)需要大量时间来处理(但不是每次都如此)。同时所有屏幕都被冻... 查看详情

ExtJS 2.3/3.x 网格存储

】ExtJS2.3/3.x网格存储【英文标题】:ExtJS2.3/3.xGridstore【发布时间】:2012-08-3020:53:25【问题描述】:我有一个使用Json存储的网格,在网格上我使用了一个检查选择模型。我想用从第一个网格中选择的记录填充另一个网格。最好的... 查看详情

如何持久化 ExtJS 数据网格列隐藏/显示/移动/调整大小?

...列显示(隐藏、显示、移动、调整大小)的更改持久化并存储在服务器上。有很多事件要监听,但在网格本身上注册处理程序似乎不会导致警报被调用:grid 查看详情

Telerik 网格自定义列构建/格式

...发布时间】:2012-06-1716:06:06【问题描述】:我有一个带有动态数据源的Telerik网格(该网格最多可以使用大约10个完全不同的模型来存储它的数据),所以我也必须动态地构建列(显然)。网格中的一列(对于某些型号)是一个以... 查看详情

extjs 4 动态启用动作列项

】extjs4动态启用动作列项【英文标题】:extjs4dynamicallyenableanactioncolumnitem【发布时间】:2012-02-1916:06:26【问题描述】:使用4.0.6我有一个带有actioncolumn的网格面板,它有两个项目,一个删除按钮和一个查看按钮。删除按钮被禁用... 查看详情

为 Ext JS 3.4 添加动态列

】为ExtJS3.4添加动态列【英文标题】:AdddynamiccolumnforExtJS3.4【发布时间】:2012-08-1320:05:21【问题描述】:有没有办法在ExtJS3.4中动态地将列添加到网格面板?我正在尝试将行扩展器列添加到我的网格面板。点赞here(第一个插件)... 查看详情

在 ExtJS 中从 GridPanel 获取模型

】在ExtJS中从GridPanel获取模型【英文标题】:GettingModelfromGridPanelinExtJS【发布时间】:2012-02-1417:30:19【问题描述】:我有一个允许对列进行内联编辑的网格面板。此列使用组合框作为编辑器,“更改”事件和“选择”事件都没有... 查看详情

缺少 ExtJs 网格列标题

】缺少ExtJs网格列标题【英文标题】:ExtJsgridcolumnheadersmissing【发布时间】:2013-11-0613:23:51【问题描述】:我有一个简单的ExtJS网格,但似乎无法显示列标题。数据很好地显示在行中,并且整个数据集适合分配的空间并留有空间。... 查看详情

ExtJS 4 - 动态模型字段

】ExtJS4-动态模型字段【英文标题】:ExtJS4-DynamicModelFields【发布时间】:2012-04-0721:48:21【问题描述】:我想动态创建我的模型字段(在ExtJS4中)。例如,有时是0到3,有时是0到7。这​​些数据来自JSON文件(和存储)。这是我的... 查看详情

Extjs mvc 将记录添加到网格面板

...但无论如何我都无法解决。我有一个extjs网格面板,它的存储和模型。从控制器中,我可以插入新记录来存储,当我使用firebug和调试时,我可以列出存储中的所有新记录(panel.store.data.items),但是在gridview中 查看详情

ExtJS 将事件处理程序动态添加到列编辑器

】ExtJS将事件处理程序动态添加到列编辑器【英文标题】:ExtJSDynamicallyaddeventhandlertoColumnEditor【发布时间】:2016-02-1511:16:37【问题描述】:我想在加载时向列编辑器动态添加一个事件处理程序。它是在网格中填充任何数据之前。... 查看详情

如何在 Extjs 中清除网格

...2411:17:10【问题描述】:我在Extjs中有一个GridStore,它可以存储带有两个网格列的记录。当网格中存在一条记录时我遇到问题,如果我删除网格,它在服务器端已成功删除,但网格中仍然存在。示例代码:xtype:\'grid\',store:\'SampleStor... 查看详情