如何查询具有一些配置选项集的所有ExtJS组件

时间:2013-03-16 17:15:41

标签: extjs extjs4

我已为view config中的某些项指定了showCondition自定义属性。我如何查询所有这些组件?

我试过Ext.ComponentQuery.query()。问题是,query()向我返回正确数量的元素,但是没有'真实'组件,也就是说,当我尝试执行元素[0] .hide()时,没有任何效果。< / p>

我注意到,当我在控制器类中使用ref获得相同的元素时,hide()完美地运行。

之后,我console.log - 获得元素的两种方式的结果并注意到奇怪的事情。首先,返回的元素具有不同的html id属性(textfield-1115textfield-1089)。其次,query()方法返回的元素已经具有hidden = true属性(这就是hide()无效的原因)。这两个元素都是textfield个组件。

以下是相关的代码部分。重要的是onAfterRenderForm()

在视图中:

Ext.define('MyApp.view.Test', {
    extend: 'Ext.container.Container',
    alias: 'widget.test',

    layout: 'fit',

    initComponent: function() {
        Ext.apply(this, {
            items: [
                {
                    title: 'form',
                    itemId: 'myForm',
                    xtype: 'form',
                    items: [
                        {
                            xtype: 'textfield',
                            fieldLabel: 'code',
                            showCondition: 'is-root',
                            allowBlank: false,
                            vtype: 'alphanum'
                        }
                    ]
                }
            ]
        });
        this.callParent(arguments);
    }
});

在控制器中:

Ext.define('MyApp.controller.Test', {
    extend: 'Ext.app.Controller',

    requires: [
        'MyApp.view.Test'
    ],

    refs: [
        {
            ref: 'codeField', selector: '[showCondition]'
        }
    ],

    init: function() {
        this.control(
            {
                '#myForm': {
                    afterrender: this.onAfterRenderForm
                }
        );
    },

    onAfterRenderForm: function(oForm) {
        var elements = oForm.query('[showCondition]');
        console.log(elements[0]);
        console.log(this.getCodeField());
        if(elements[0].id == this.getCodeField().id)
            alert('Elements are not the same!!!');
    }
});

1 个答案:

答案 0 :(得分:2)

此:

refs: [{
    ref: 'codeField', selector: '[showCondition']
}]

oForm.query('[showCondition]')[0]略有不同。

对于ref,您抓住了使用已定义的showCondition值找到的第一个组件。在oForm.query中,您正在抓取第一个找到的组件,该组件是oForm 的子项,它具有已定义的showCondition值。

这意味着如果您的应用程序中的任何视图中有其他字段已定义showCondition,则对生成的getter getter的调用可能会返回这些字段中的任何一个。这取决于Ext决定将它们放入的顺序。

听起来好像发生了一些事情

  1. 您的应用中还有其他字段已定义showCondition但不在控制器正在查看的表单上。
  2. 您的视图正在隐藏状态下呈现。是作为卡片布局中的项目添加还是类似的东西?