下面是我的对话框代码,我试图通过id获取文本字段但不能在beforesubmit侦听器中执行此操作。通常我需要在特定级别找到特定的小部件,所以如果可能的话提供一些解释。
<jcr:root xmlns:cq="http://www.day.com/jcr/cq/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:nt="http://www.jcp.org/jcr/nt/1.0"
jcr:primaryType="cq:Dialog"
title="dialog"
xtype="dialog">
<items
jcr:primaryType="cq:Widget"
xtype="tabpanel">
<items jcr:primaryType="cq:WidgetCollection">
<tab1
jcr:primaryType="cq:Panel"
title="Tab 1">
<items jcr:primaryType="cq:WidgetCollection">
<textfield
jcr:primaryType="cq:Widget"
itemId="textfield1"
xtype="textfield"/>
<selectbox
jcr:primaryType="cq:Widget"
itemId="selectbox1"
name="./selectvalue"
type="select"
xtype="selection">
<options jcr:primaryType="cq:WidgetCollection">
<one
jcr:primaryType="nt:unstructured"
text="one"
value="one"/>
<two
jcr:primaryType="nt:unstructured"
text="two"
value="two"/>
<three
jcr:primaryType="nt:unstructured"
text="three"
value="three"/>
</options>
</selectbox>
</items>
</tab1>
</items>
</items>
<listeners
jcr:primaryType="nt:unstructured"
beforesubmit="function(dialog){
console.log(dialog);
var item = dialog.findById("textfield1");
console.log(item);
}"/>
</jcr:root>
由于
答案 0 :(得分:1)
只能使用getComponent()
CQ.Ext.Container
方法重新获得 itemId 的组件。 Dialog不是CQ.Ext.Container
的子类。以下是有关此文档的摘录:
当没有对象引用可用时,itemId可用作获取组件引用的替代方法。不使用带有CQ.getCmp的id,而是将itemId与CQ.Ext.Container.getComponent一起使用,它将检索itemId或id。
findById()
用于查找 id 而非 itemId 的组件。
对话框中的Tabpanel是CQ.Ext.Container
类型的后代。如果你想使用itemId来获取引用,你首先应该引用它,然后在其上使用getComponent()
方法。
var tab = dialog.findByType('TabPanel')[0]; //returns an array so taking the first element
var textfield = tab.getComponent('textfield1');
由于对话框中的字段已修复,并且您知道要查找第一个文本字段,因此可以直接执行
var textfield = dialog.findByType('textfield')[0]; // need not deal with id's at all.