extjs 有条件地渲染列

Posted

技术标签:

【中文标题】extjs 有条件地渲染列【英文标题】:extjs conditionally render columns 【发布时间】:2011-03-11 22:38:47 【问题描述】:

假设我有一个包含 2 列的网格面板:姓名和工资,相应商店的 dataIndex 具有相同的名称

在 extjs 中,渲染器函数是这样的:

function(value, metaData, record, rowIndex, colIndex, store)

现在,当我根据属性的名称调用 randerer 时,如果我想进行不同的渲染,我该怎么做? 例如。

function(value, metaData, record, rowIndex, colIndex, store)
if (record.name == 'Salary'|| record.id == 'Salary')

//render logic

else if (record.name == 'Name'|| record.id == 'Name')
  //different render logic


正确的语法是什么?

【问题讨论】:

【参考方案1】:

嗯,语法上是正确的。但是 if 语句中的条件不正确。 value 变量保存正在呈现的值,因此如果您需要检查它应该是相当简单的 if 条件。

在您的情况下,您正在尝试呈现 Salary 或 Name? record 变量保存整个记录。没有record.name 字段。记录对象包含以下字段:

    data -> 是一个带有数据的对象。 (使用应该是用这个) id -> 记录的 ID。这是由您商店中的idProperty 指定的 json -> json 格式的数据 商店 -> 您的商店本身 原型 -> 原型

因此,如果您要进行任何比较和检查,则需要使用record.data.<property-name>

在您的情况下,您的姓名和薪水都有一个 dataIndex,因此代码将是:

function(value, metaData, record, rowIndex, colIndex, store) 

    if(record.data.property == Name) 
            //render logic for name
    
    else if(record.data.property == Salary) 
            // render logic for salary
    

最后,这个函数将进入你的列的渲染器属性。

【讨论】:

应该是:record.data.property == 'Name'? (引号或不引号) 我只是放了一个示例条件。它应该根据您的逻辑。如果您正在检查字符串“名称”,那么它应该用引号引起来。

以上是关于extjs 有条件地渲染列的主要内容,如果未能解决你的问题,请参考以下文章

有条件地呈现列时,列标题不可见

Extjs 现代网格列单元格工具条件 iconCls

ExtJS 3.4.0 GridPanel 有条件地禁用行

JavaScript Extjs:根据其他字段的条件,使用自定义类渲染网格中的单元格

有条件地渲染一个 primefaces 命令链接

ExtJS 4.1 - XTemplate 中的工具提示