【问题标题】:extjs conditionally render columnsextjs 有条件地渲染列
【发布时间】: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
}
}

正确的语法是什么?

【问题讨论】:

    标签: extjs gridpanel


    【解决方案1】:

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

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

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

    因此,如果您要进行任何比较和检查,则需要使用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'? (引号或不引号)
    • 我只是放了一个示例条件。它应该根据您的逻辑。如果您正在检查字符串“名称”,那么它应该用引号引起来。
    猜你喜欢
    • 2018-06-30
    • 2014-11-26
    • 2012-11-20
    • 2015-02-02
    • 2019-03-24
    • 2013-05-01
    • 2018-09-13
    • 2019-02-18
    • 1970-01-01
    相关资源
    最近更新 更多