如何一次通过名称属性为多个元素设置值(ExtJs 4)

Posted

技术标签:

【中文标题】如何一次通过名称属性为多个元素设置值(ExtJs 4)【英文标题】:How to set value to multiple elements by name attribute at once (ExtJs 4) 【发布时间】:2016-02-04 15:02:23 【问题描述】:

在 JQuery 中,我可以通过这种方式一次为多个元素设置值:

<form action="" id="mainForm">
    <input type="text" name="Phone" class="deftext" value="" > 
    <input type="text" name="Number" class="deftext" value="" >
    <input type="text" name="Name" class="deftext" value="" > 
    <input type="text" name="Lastname" class="deftext" value="" >
    <input type="text" name="Middlename" class="deftext" value="" > 
    <input type="text" name="Age" class="deftext" value="" >
    <input type="text" name="Email" class="deftext" value="" > 
    <input type="text" name="Occupation" class="deftext" value="" >
</form>

$('#mainForm .deftext').val("hello");
// OR
$('#mainForm input:text').val("");

ExtJS 4中是否有类似的方法将以下代码修改为单行?

Ext.getCmp('mainForm').down('[name=Phone]').setValue('');
Ext.getCmp('mainForm').down('[name=Number]').setValue('');
Ext.getCmp('mainForm').down('[name=Name]').setValue('');
....

【问题讨论】:

【参考方案1】:

您的 JQuery 代码不是真正可读的,因为在查看函数时,您看不到有多个字段受到影响。这就是 ExtJS 不支持这种语法的原因。要么你使用

Ext.getCmp('mainForm').down('[name=Phone]').setValue('');
Ext.getCmp('mainForm').down('[name=Number]').setValue('');

或者你使用

Ext.getCmp('mainForm').getForm().setValues(
    Phone: '',
    Number: ''
);

与您的 JQuery 示例不同,这两个都是可读的,因为我不必知道哪些类已应用于哪些字段。

如果要将所有字段重置为上次form.loadRecord 操作期间设置的值,或者如果没有执行form.loadRecord 操作,则使用初始值,请使用form.reset

Ext.getCmp('mainForm').getForm().reset();

【讨论】:

jQuery 代码对我来说似乎很可读。知道多个属性受到影响(它们不是字段)与代码是否可读是分开的。【参考方案2】:

好吧,如果子组件有共同点(例如 xtype),您可以执行类似的操作

Ext.getCmp('mainForm').query('textfield').each(function(component)component.setValue(''));

但是不行,你不能在组件数组上使用组件方法。

【讨论】:

好吧,乍一看不,Ext.Array.each() 方法只使用 for 循环(源 - docs.sencha.com/extjs/4.2.1/source/…),你必须为数组中的每个组件调用 setValue() 方法所以我猜你无论如何都必须遍历数组。据我所知,for 循环通常是在 JS 中循环遍历数组的最快方法,所以我猜它并不“昂贵”(我敢打赌,当你调用 $('.deftext').val("hello"); 时,JQuery 会做类似的事情)。

以上是关于如何一次通过名称属性为多个元素设置值(ExtJs 4)的主要内容,如果未能解决你的问题,请参考以下文章

为具有不同名称和不同@class 属性值的多个元素创建一个包装器元素

ExtJS重置

Jquery:css()方法

当同一属性有多个值时,如何通过数据属性获取元素?

组合加载后如何设置 extjs 组合的值?

如何将 EXTJS 4.2.1 网格行按多个关系分组?