【发布时间】:2013-04-23 09:41:26
【问题描述】:
我是 Sencha ExtJs 的新手
我不明白Ext.getCmp('component_id').getEl().hide(); 行。 .getEl() 有什么用。可以直接写Ext.getCmp('component_id').hide();吗?
并解释一下.el,Ext.get()。
【问题讨论】:
标签: javascript extjs extjs4.2
我是 Sencha ExtJs 的新手
我不明白Ext.getCmp('component_id').getEl().hide(); 行。 .getEl() 有什么用。可以直接写Ext.getCmp('component_id').hide();吗?
并解释一下.el,Ext.get()。
【问题讨论】:
标签: javascript extjs extjs4.2
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 组件的顶级 DOM 元素。
ExtJS(4.2.1)的当前版本定义.getEl()函数如下:
MyCmp.getEl = function () {
return this.el;
}
这意味着MyCmp.getEl() 和MyCmp.el绝对相等。
如果您希望代码简洁明了,请使用.el。但是,.getEl() 可能会在将来 ExtJS 为组件的 DOM 元素检索过程添加额外的逻辑(例如,首先检查它是否存在)时有用。
我更喜欢.el。
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;
}
但是,这两个函数似乎产生相同的结果。他们只是将style="display: none;" 添加到组件的 DOM 元素中。
我使用MyCmp.hide()。
【讨论】:
cmp.el.dom。所以Ext.Element封装了DOM元素,Ext.Component又封装了Ext.Element。
1)
Ext.getCmp('')-> ExtJS 在页面构建时维护组件列表。使用 getCmp('unique ID') 从列表中获取组件2)
getEl()-> 返回组件的 HTML 元素/DOM3)
hide()-> 只对组件的样式应用 css(例如:"display:none")
Ext.getCmp('component_id').hide()
等价于
Ext.getCmp('component_id').getEl().hide()
【讨论】:
Component 有一个hide() 方法。