2016-12-30 141 views
1

我正面临向动态添加文本区域到容器的问题。将文本区域动态添加到容器extjs

容器的初始创建:

xtype: 'container', 
    layout: 'form', 
    width: 400, 
    ref: 'form', 
    layoutConfig: { 
     labelSeparator: ' ', 
     trackLabels: true 
    }, 
    items: [{ 
     xtype: 'textarea', 
     value: 'test', 
     fieldLabel: 'label', 
     anchor: '100%', 
     submitValue: false, 
     readOnly: true, 
     ref: '../field_1', 
     id: 'field_1' 
    }] 
} 

动态代码:

for (i = 4; i < obj.length; i++) { 
    var id = i + 12; 
    id = 'field_' + id; 
    var field = newTextArea(id); 
    field.setValue(obj[i].value); 
    field.setVisible(true); 
    this.form.add(field); 
} 

函数来创建文本区:

function newTextArea(id) { 
    var text_Area = new Ext.form.TextArea({ 
     fieldLabel: 'Test', 
     height: 30, 
     width: 250, 
     submitValue: false, 
     readOnly: true, 
     autoScroll: true, 
     id: id 
    }); 
    return text_Area; 
} 

问题:

当我调试,看看形成,表单项中添加了textarea,但未在浏览器中显示。有人可以建议做什么?

问候,

拉吉

+0

动态代码在哪里和在哪个范围内执行?不确定“this.form”是引用容器的正确方法.. – scebotari66

+0

@scebotari动态代码被执行的形式作用域,如果我使用呈现:true,EL是未定义错误即将到来。 – user1770589

+0

检查这个简单的小提琴 - https://fiddle.sencha.com/#view/editor&fiddle/1ne5。不知道你的代码有什么问题,你没有提到什么是'obj',我认为'this.form'是对容器的错误引用。我认为你可以使用'Ext.ComponentQuery.query'或类似的东西(比如用于查询组件的'up'和'down'方法)。 –

回答

0

检查这个simple fiddle

不知道你的代码有什么问题,你没有提及什么是obj,我认为this.form是对容器的错误引用。我认为你可以使用Ext.ComponentQuery.query或类似的东西(例如updown方法queryable组件)。

0

在extjs 3.x中,将项目添加到容器后必须调用doLayout

for (i = 4; i < obj.length; i++) { 
    var id = i + 12; 
    id = 'field_' + id; 
    var field = newTextArea(id); 
    field.setValue(obj[i].value); 
    field.setVisible(true); 
    this.form.add(field); 
} 

this.form.doLayout();