You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle APEX树节点如何根据TYPE列条件设置文本颜色?

解决Apex树节点根据TYPE列条件着色的问题

我需要根据树数据源中的TYPE列值为节点设置不同文本颜色,但当前JavaScript代码无法访问TYPE字段——因为Apex树默认不会将所有字段数据保存到客户端模型中。

现有代码

树区域初始化JavaScript代码

function( options ) {
    options.makeNodeAdapter = function(data, types, hasIdentity) {
        types.default.classes = "u-color-1-text"
    var a
    a = $.apex.treeView.makeDefaultNodeAdapter( data, types );
    return a;
  }
    return options;
}

树数据源SQL代码

select  
    CASE
        WHEN CONNECT_BY_ISLEAF = 1 THEN 0
        ELSE 1
    END AS NODE_STATUS,
    LEVEL,
    ID as ID,
    NAME as title,
    PARENT_ID AS PARENT_ID,
    DESCRIPTION as tooltip,
    ICON_HTML  as icon,
    TYPE
from TABLE_T
start with PARENT_ID is null
connect by prior ID = PARENT_ID
order siblings by ID ASC;

解决步骤

1. 修改SQL,将TYPE字段传递到客户端

Apex树支持通过DATA别名字段传递自定义数据到客户端。我们可以把TYPE值嵌入这个字段,这里用JSON格式确保数据结构清晰:

select  
    CASE
        WHEN CONNECT_BY_ISLEAF = 1 THEN 0
        ELSE 1
    END AS NODE_STATUS,
    LEVEL,
    ID as ID,
    NAME as title,
    PARENT_ID AS PARENT_ID,
    DESCRIPTION as tooltip,
    ICON_HTML  as icon,
    -- 新增DATA列,传递TYPE值到客户端
    '{"type":"' || REPLACE(TYPE, '"', '\"') || '"}' as DATA,
    TYPE
from TABLE_T
start with PARENT_ID is null
connect by prior ID = PARENT_ID
order siblings by ID ASC;

注:用REPLACE转义TYPE中的双引号,避免JSON格式错误;如果TYPE不含特殊字符,也可以直接用TYPE as DATA简化写法。

2. 修改JavaScript代码,根据TYPE设置颜色

在makeNodeAdapter函数中,data参数会包含我们传递的DATA字段,解析后即可获取TYPE值,再根据不同TYPE设置对应的文本颜色类:

function( options ) {
    options.makeNodeAdapter = function(data, types, hasIdentity) {
        // 解析DATA字段获取TYPE
        var nodeType = data.DATA;
        // 如果用了JSON格式,就用下面这行替换上面的
        // var nodeType = data.DATA ? JSON.parse(data.DATA).type : '';
        
        // 根据TYPE设置对应颜色类
        if (nodeType === 'TYPE_A') {
            types.default.classes = "u-color-1-text";
        } else if (nodeType === 'TYPE_B') {
            types.default.classes = "u-color-2-text";
        } else if (nodeType === 'TYPE_C') {
            types.default.classes = "u-color-3-text";
        } else {
            types.default.classes = "u-color-default-text"; // 默认样式
        }
        
        var a = $.apex.treeView.makeDefaultNodeAdapter( data, types );
        return a;
    }
    return options;
}

补充说明

确保你的Apex应用中已定义对应的颜色类(如u-color-2-text、u-color-3-text),可以通过页面内联CSS或主题样式添加这些类的具体颜色规则。

内容的提问来源于stack exchange,提问作者shady

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 05:37:42