你能详细解释.el,getEl(),Ext.get()吗?

时间:2013-04-23 09:41:26

标签: javascript extjs extjs4.2

我是Sencha ExtJs的新手

我不明白行Ext.getCmp('component_id').getEl().hide();.getEl()有什么用?我可以直接写Ext.getCmp('component_id').hide();吗?

并向我解释.el,Ext.get()

2 个答案:

答案 0 :(得分:12)

Ext.getCmp()VS Ext.get()

Ext.getCmp()在ExtJS组件树中查找现有(已创建)组件。请注意,不鼓励使用它。相反,请依靠ComponentQuery

Ext.get()按ID找到 DOM元素。例如:

<html>
    <body>
        <div id="target">Hello, world!</div>
    </body>
</html>

Ext.get('target')将返回div#target DOM元素。

我个人从不使用任何一个。相反,我使用ComponentQuery定位组件,然后检索它们的DOM元素,如下所述。


MyCmp.getEl()VS MyCmp.el

两者都只检索MyCmp组件的顶级DOM元素。

当前版本的ExtJS(4.2.1)定义了.getEl()函数,如下所示:

MyCmp.getEl = function () {
    return this.el;
}

这意味着MyCmp.getEl()MyCmp.el 完全相同

如果您希望保持代码简洁和甜蜜,请使用.el。但是,如果将来ExtJS为组件的DOM元素检索过程添加了额外的逻辑(例如,首先检查它是否存在),.getEl()可能会有用。

我更喜欢.el


MyCmp.hide()VS MyCmp.el.hide()

MyCmp.hide()MyCmp.el.hide()是两个不同的功能。当前版本的ExtJS(4.2.1)将它们定义如下:

MyCmp.hide = function (animateTarget, cb, scope) {
    var me = this,
        continueHide;
    if (me.pendingShow) {
        delete me.pendingShow;
    } if (!(me.rendered && !me.isVisible())) {
        continueHide = (me.fireEvent('beforehide', me) !== false);
        if (me.hierarchicallyHidden || continueHide) {
            me.hidden = true;
            me.getHierarchyState().hidden = true;
            if (me.rendered) {
                me.onHide.apply(me, arguments);
            }
        }
    }
    return me;
}

MyCmp.el.hide = function (animate){
    if (typeof animate == 'string'){
        this.setVisible(false, animate);
        return this;
    }
    this.setVisible(false, this.anim(animate));
    return this;
}

但是,这两种功能似乎都会产生相同的结果。他们只需在组件的DOM元素中添加style="display: none;"

我使用MyCmp.hide()

答案 1 :(得分:2)

  

1)Ext.getCmp('') - &gt; ExtJS在构造页面时维护组件列表。使用getCmp(&#39;唯一ID&#39;)从列表中提取组件

     

2)getEl() - &gt;返回组件的HTML元素/ DOM

     

3)hide() - &gt;只是将css(例如:"display:none")应用于组件的样式

所以

Ext.getCmp('component_id').hide()

相当于

Ext.getCmp('component_id').getEl().hide()