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>闭合标签外,生成的表格结构无效。
修复步骤
- 重命名JS文件:将
TestRender.js重命名为test_tlcRender.js,和test.control的RuntimeRender配置保持完全一致。 - 修正构造函数名:将JS中的构造函数定义从
function test($)修改为function test_tlc($),和配置中的类名、构造函数名匹配。 - 修复表格生成逻辑:调整循环结构和变量自增逻辑,生成正确的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
相关产品推荐
相关产品推荐

