如何在渲染后动态更改ExtJS GridPanel viewconfig上的getRowClass函数

时间:2012-12-28 15:56:28

标签: extjs extjs4

我有一个Ext.grid.Panel函数,它返回一个自定义类,用于通过覆盖getRowClass函数对网格中的行进行颜色编码。这很好用,但我想让用户可以选择更改网格着色的标准。下面的示例,我按“严重性”属性着色,但我想将其更改为“状态”,例如。有没有一种方法可以动态更改getRowClass函数,或者网格上的整个viewconfig,并在网格渲染后重新着色网格?

alarmsGrid = Ext.create('Ext.grid.Panel', {
    title: 'Netcool Alarms',
    id: 'Netcool Alarms',
    columnLines: true,
    store: alarms_store,
    loadMask: true,
    stripeRows: true,
    features: [alarmsGroupingFeature],
    viewConfig: {
        getRowClass: function(record, rowIndex, rowParams, store){
          return record.get('severity').toLowerCase();
        }
    },

2 个答案:

答案 0 :(得分:4)

这只是因为你做错了。几乎所有类型的配置对象仅在类的实例化时间相关,之后不会产生任何影响。因此,您需要获取视图实例本身以直接更改其中的属性(方法)。要从评论中提取您的示例,您需要将其写为

alarmsGrid.getView().getRowClass = function(record, rowIndex, rowParams, store){ 
     return record.get('status').toLowerCase(); 
}

参见 JSFiddle

答案 1 :(得分:3)

根据ExtJs Documentation for Ext.grid.View (我刚刚成功测试了!)你可以在getRowClassviewConfig内为debugger提供回调函数没问题!

我意识到这是一篇较旧的帖子,但您可能需要考虑在上面的代码中插入null语句并逐步完成回调。你可能会发现其他东西出了问题,比如你拼错了模型字段名称,或者当调用它时属性有<tr>值。

同样从上面的代码中看起来您正在使用网格的分组功能,这将改变此功能的HTML标记。因此,行类可能位于比预期更深的nester getRowClass元素上!您可以通过更改'status'回调函数来测试这一点,以返回一个易于搜索的唯一类名,例如&#39; this-is-a-test&#39;。

然后返回并再次测试,使用调试器语句验证是否正在调用回调。然后使用您喜欢的浏览器开发人员工具,在页面源中搜索您的唯一测试类,以查看它实际应用于哪个HTML元素。

更新:哈,哈,在打字之后我意识到我完全读了这个问题并且你在#34;之后说过#34;。令我生气的部分是,接受的答案是说你&#34;做错了&#34; 并不一定是真的。在已经呈现视图之后,接受的答案对于更改整个回调函数仍然是正确的。

但是,根据每个不同回调的复杂程度,可能仍然最好不要改变整个回调,只改变回调中使用的标准。根据您的应用,这两种方式都不一定比另一种更好。如果它只是用另一个字段名称切换{{1}}字段一样简单,那么最好只删除硬编码的引用并在视图上使用可以更改的变量,而不是重新声明一堆不同的回调和切换它们。