我有一个Textfield,Combo和一个收音机。我想点击一个按钮获得这3个字段的值。如何在不使用Ext.getCmp('id').getValue();
有没有其他方法可以获得价值,
请告诉我。
答案 0 :(得分:2)
这取决于您如何包含字段以及要单击以获取其值的按钮。
您可以在容器中上下导航
var TheComponent = this.up('form').down('#MyTextField')
这会爬上你的容器层次结构,直到它找到一个'form'容器(无论它的ID或名称是什么),然后它们向下爬,直到找到一个id为'MyTextField'的组件
如果您的单选按钮位于单选按钮组容器中,则可以检索具有所有“开启”键/值的对象。
如果您的容器是表单,您可以使用lzhaki提出的方法并检索包含表单上所有值的对象。请记住,组合框的行为与文本框不同。
这些方法中的每一个都将返回单个值或包含一组值的对象。
答案 1 :(得分:0)
在ExtJS 4.1中,我发现前面的例子很接近,但不正确:
var TheComponent = this.up('form').down('#MyTextField')
表单对象中没有“向下”方法(显然表单字段不包含在down方法的导航逻辑中)。
这对我来说是有效的,可以将初始焦点设置在表单中的编辑字段中。
var theForm = this.down('form').getForm();
var theField = theForm.findField('idEditVolname');
theField.focus();
您仍然必须使用getForm()
来获取嵌入的表单对象,然后使用findField()
来查找特定字段 - 至少这对我有用。
答案 2 :(得分:0)
我不知道这是否仍然相关,但这里也是如此
首先,在Extjs4及更高版本中,您使用Ext.ComponentQuery.query()
代替Ext.getCmp()
这允许你做的是访问你直接拥有的任何xtype,就像其他答案中提到的up
和down
方法一样,但是这个方法不需要任何锚点,因为它搜索整个组件层次结构。由于页面上的每个元素中只有一个元素很容易实现而不使用id。
我会命名包含字段的主面板,但这只是为了方便
看看这个fiddle
代码非常简单:
var panel = Ext.create('Ext.panel.Panel', {
renderTo: Ext.getBody(),
name: 'myForm',
title: 'Sample Test',
layout: 'anchor',
height: 200,
items: [{
xtype:'textfield',
fieldLabel: 'text',
value: 'Oh yeah!'
}]
});
var myVal = Ext.ComponentQuery.query('panel[name=myForm] textfield')[0];
alert (myVal.getValue());
使用radio
和combo
字段也可以这样做,而且您不需要表格,尽管这样做更符合逻辑。