Extjs4中,getCmp 和 getComponent的区别是什么呢
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Extjs4中,getCmp 和 getComponent的区别是什么呢相关的知识,希望对你有一定的参考价值。
function clickBtnIpGrid()
var tabs = Ext.getCmp('tabs');
var tab = tabs.getComponent('IpGrid');
if(tab)
tabs.setActiveTab('IpGrid');
else
tabs.add( ....
在这段代码里,我把俩函数互换,就不能显示了,我看文档里这俩函数都可以通过id取到组件啊,求解
xt.get( String/HTMLElement/Ext.Element el ) : Ext.dom.Element
返回的是 Ext.dom.Element 对象。
Ext.getCmp( String id)
返回的是Ext.Component对象。也就是在js代码中定义的对象。
例如,使用这两个方法:
temp1 = Ext.getCmp("checkbox1");
temp2 = Ext.get("checkbox1");
则得到的结果如下:
参考技术A getComponent 这个方法是tabpanel组件下的方法追问那是不是取其他xtype的组件就需要用getCmp呢~~还有get()是在什么时候用呢
本回答被提问者采纳为啥 Ext.getCmp(...).setChecked 会导致错误
【中文标题】为啥 Ext.getCmp(...).setChecked 会导致错误【英文标题】:Why does Ext.getCmp(...).setChecked cause errors为什么 Ext.getCmp(...).setChecked 会导致错误 【发布时间】:2017-08-19 22:48:29 【问题描述】:我正在尝试在加载用于编辑用户信息的窗口时动态设置 ExtJS 6.2 单选框的选中状态。
我的窗口代码如下
Ext.define('scim.view.users.EditUserWdw',
extend: 'Ext.window.Window',
alias: 'widget.EditUserWdw',
id: 'editUserWdw',
required: [
'scim.view.users.UserController',
'Ext.form.Panel'
],
width: 400,
listeners:
beforeclose: function (wdw)
var frm = this.down('form');
if (frm.isDirty())
Ext.Msg.show(
title: 'Confirm Cancel',
msg: '<p>You started editing a user. Closing this window now will cause you to lose any information you changed.</p><p>Are you sure?</p>',
icon: Ext.Msg.QUESTION,
buttons: Ext.Msg.YESNO,
fn: function (ans)
if (ans == 'yes')
frm.reset();
wdw.close();
);
return false;
else
return true;
,
items: [
xtype: 'form',
reference: 'form',
id: 'editUserFrm',
border: false,
style: 'background-color: #fff',
url: '/scim_libs/Users.php?metho=updateUser&userId=' + sessionStorage.userId,
padding: 5,
bbar: ['->',
xtype: 'button',
text: 'Update User',
iconCls: 'x-fa fa-save',
handler: function ()
var frm = this.up('form');
if (frm.isValid())
frm.submit(
success: function (frm, response)
var jData = Ext.util.JSON.decode(response.resposnse.responseText);
if (jData.status == "duplicate")
Ext.Msg.show(
title: 'Duplicate Email',
msg: '<p>The email address <strong>' + Ext.getCmp('editUserEmail').getValue() + '</strong> is already used by another user.</p><p>Please use a different email address and try adding the user again.</p>',
icon: Ext.Msg.ERROR,
buttons: Ext.Msg.OK,
closable: false,
fn: function ()
Ext.getCmp('editUserEmail').focus();
this.close();
)
else if (jData.status == "success")
Ext.getStore('User').load();
Ext.Msg.show(
title: 'User Added',
msg: '<p>The user <strong>' + Ext.getCmp('editUserFirstName').getValue() + ' ' + Ext.getCmp('addUserLastName').getValue() + '</strong> has been updated successfully.</p>',
icon: Ext.Msg.INFO,
buttons: Ext.Msg.OK,
fn: function ()
Ext.getCmp('addUserFrm').reset();
Ext.getCmp('addUserWdw').close();
)
else
Ext.Msg.show(
title: 'Unexpected Error!',
msg: '<p>An unexpected error occurred when trying to update the user <strong>' + Ext.getCmp('addUserFirstName').getValue + ' ' + Ext.getCmp('adduUserLastName').getValue() + '</strong>. Please try updating the user again.</p><p>Should this problem persist, please contact technical support and provide the following information:</p><p>' + jData.status + '</p>',
icon: Ext.Msg.ERROR,
buttons: Ext.Msg.OK,
fn: function ()
Ext.getCmp('addUserFrm').reset();
Ext.getCmp('addUserWdw').close();
)
)
,
xtype: 'button',
text: 'Cancel',
iconCls: 'x-fa fa-ban',
handler: function ()
this.up('form').up('window').close();
],
items: [
xtype: 'textfield',
anchor: '100%',
name: 'editUserFirstName',
id: 'editUserFirstName',
fieldLabel: 'First Name',
allowBlank: false,
minLength: 2,
madLength: 65,
selectOnAutoFocus: true,
listeners:
afterrender: function ()
this.focus(true);
,
xtype: 'textfield',
anchor: '100%',
name: 'editUserLastName',
id: 'editUserLastName',
fieldLabel: 'Last Name',
allowBlank: false,
minLength: 2,
maxLength: 65
,
xtype: 'textfield',
anchor: '100%',
name: 'editUserEmail',
id: 'editUserEmail',
fieldLabel: 'Email',
allowBlank: false,
maxLength: 255,
selectOnFocus: true,
vtype: 'email'
,
xtype: 'textfield',
anchor: '100%',
name: 'editUserPhone',
id: 'editUserPhone',
fieldLabel: 'Phone',
maskRe: /[0-9]/,
regexText: 'Numbers Only',
allowBlank: true,
vtype: 'phone',
maxLength: 14,
listeners:
change: function ()
if (this.getValue().length == 3)
this.setValue('(' + this.getValue() + ') ');
if (this.getValue().length == 9)
this.setValue(this.getValue() + '-');
,
xtype: 'fieldcontainer',
fieldLabel: 'Reset Password',
itemId: 'editUserResetGrp',
defaults:
flex: 1
,
layout: 'hbox',
width: 200,
items: [
xtype: 'radiofield',
boxLabel: 'Yes',
name: 'editUserReset',
inputValue: 1,
id: 'editUserReset1'
,
xtype: 'radiofield',
boxLabel: 'No',
name: 'editUserReset',
inputValue: 0,
id: 'editUserReset2'
]
,
xtype: 'fieldcontainer',
fieldLabel: 'Lock Account',
defaults:
flex: 1
,
layout: 'hbox',
width: 200,
items: [
xtype: 'radiofield',
boxLabel: 'Yes',
name: 'editUserLocked',
inputValue: 0,
id: 'editUserLocked1'
,
xtype: 'radiofield',
boxLabel: 'No',
name: 'editUserLocked',
inputValue: 1,
id: 'editUserLocked2'
]
]
]
)
我的控制器代码是
Ext.define('scim.view.users.UserController',
extend: 'Ext.app.ViewController',
alias: 'controller.user',
addUser: function ()
var addUserWdw = Ext.create('scim.view.users.AddUserWdw',
title: 'Add New User'
).show();
,
editUser: function (grid, rowIndex, colIndex)
var objRow = Ext.getStore('User').getAt(rowIndex);
var editUserWdw = Ext.create('scim.view.users.EditUserWdw',
title: 'Edit User - ' + objRow.data.userFirstName + ' ' + objRow.data.userLastName
).show();
Ext.getCmp('editUserFirstName').setValue(objRow.data.userFirstName);
Ext.getCmp('editUserLastName').setValue(objRow.data.userLastName);
Ext.getCmp('editUserEmail').setValue(true);
Ext.getCmp('editUserPhone').setValue('(' + objRow.data.userPhone.substr(0, 3) + ') ' + objRow.data.userPhone.substr(3, 3) + '-' + objRow.data.userPhone.substr(6, 4));
console.log(objRow.data.reset);
if (objRow.data.reset == 0)
console.log(Ext.getCmp('editUserReset2'));
console.log(Ext.getCmp('editUserReset2').checked);
Ext.getCmp('editUserReset2').setChecked(true);
console.log(Ext.getCmp('editUserReset2').checked);
else
console.log(Ext.getCmp('editUserReset1'));
,
getUsers: function ()
Ext.getStore('Users').load();
)
运行时
console.log(Ext.getCmp('editUserReset2').checked)
收到的结果与预期的一样“假”。
console.log(Ext.getCmp('editUserReset2').setChecked(true) 触发然后返回的错误是 未捕获的类型错误:Ext.getCmp(...).setChecked 不是函数 我已经尝试获取 fieldcontainer,然后是一个无线电场数组,并使用 setChecked(index, true) 获得相同的结果。
我已经检查了documentation,它是这个 xtype 的一种方法。所以我很困惑这个错误是从哪里产生的。任何帮助将不胜感激。
【问题讨论】:
在这里回答:sencha.com/forum/… 谢谢@EvanTrimboli... 【参考方案1】:感谢@EvanTrimboli 的以下回答...
我在 Sencha 的网站上使用了现代工具包的文档,它使用了
Ext.getCmp(...).setChecked(true)
虽然我的代码实际上使用的是使用
的 Classic ToolkitExt.getCmp(...).setValue(value)
作为设置单选按钮选中状态的手段。
【讨论】:
以上是关于Extjs4中,getCmp 和 getComponent的区别是什么呢的主要内容,如果未能解决你的问题,请参考以下文章
使用 store.load 下载文件(Excel 文件)? (ExtJS 4.1)
Ext.js细节:在MVC中处理Widget Column,GetCmp和ComponentQuery, Id和ItemId