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

Genexus Evo3开发User Control报控件未定义错误技术问询

问题原因分析

Uncaught ReferenceError: [UserControlName] is not defined 报错的核心原因是Genexus运行时无法找到匹配的用户控件构造函数,具体问题如下:

  • 配置与JS文件名不匹配:test.control中指定的运行时渲染文件为test_tlcRender.js,但你实际的JS文件名为TestRender.js,Genexus无法加载到正确的JS文件。
  • 构造函数名与配置不匹配:test.control中ObjClass和Constructor.Name均配置为test_tlc,但你JS中定义的构造函数名为test,JS加载后也无法找到对应构造函数。
  • 额外逻辑错误:JS中表格生成逻辑存在两处问题,一是内层循环错误使用i++会触发死循环,二是<td>元素写在了<tr>闭合标签外,生成的表格结构无效。
修复步骤
  1. 重命名JS文件:将TestRender.js重命名为test_tlcRender.js,和test.control的RuntimeRender配置保持完全一致。
  2. 修正构造函数名:将JS中的构造函数定义从function test($)修改为function test_tlc($),和配置中的类名、构造函数名匹配。
  3. 修复表格生成逻辑:调整循环结构和变量自增逻辑,生成正确的HTML表格结构。

注意:修改完成后需要重新打包部署用户控件到Genexus知识库,执行完整的Build操作后再测试,避免缓存导致修改不生效。

修正后的核心代码片段
////test_tlcRender.js
function test_tlc($)
{
    this.show = function()
    {   
        var html = ''
        html += '<div class="grid">';
        html += '<table>';
        for (var i = 0; i < this.TableCreate.EjeX; i++) {
             html += '<tr>';
             for (var j = 0; j < this.TableCreate.EjeY; j++) {
                html += '<td></td>';
             }
             html += '</tr>';
        }
        html += '</table>';
        html += '</div>';
        this.setHtml(html);
    }

    this.destroy = function()
    {
        // 控件销毁时的清理代码
    }

    this.GetGrid = function()
    {
     return this.Grid;
    }

    this.SetGrid = function(data)
    {
        this.Grid = data;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:09:03