我试图在运行时从viewcontroller禁用文件字段上的按钮,但是我收到了错误。
Component.js中的错误
me.ariaEl.dom.setAttribute('aria-disabled',false); //无法读取null的属性'setAttribute'[似乎me.ariaEl.domis为null]
错误堆栈跟踪.........
Uncaught TypeError: Cannot read property 'setAttribute' of null
at constructor.onEnable (Component.js?version=20170809094755:4378)
at constructor.callParent (Base.js?version=20170809094755:1288)
at constructor.onEnable (Button.js?version=20170809094755:1786)
at constructor.callParent (Base.js?version=20170809094755:1288)
at constructor.onEnable (FileButton.js?version=20170809094755:165)
at constructor.enable (Component.js?version=20170809094755:3033)
at constructor.setDisabled (Component.js?version=20170809094755:4863)
我有一个简单的文件字段,
{
xtype: 'filefield',
fieldLabel: 'Attach Items',
buttonText: 'Browse Items',
itemId : 'buttonid',
buttonConfig: {
id : 'uploadmailwidget0Btn'
},
}
尝试在viewcontroller中禁用 - 代码:
Ext.getCmp('uploadmailwidget0Btn').setDisabled(true);
有人可以帮忙吗?问一下很简单,我想从viewcontroller中禁用filefield上的按钮。
答案 0 :(得分:1)
我认为您要做的是在ViewController中使用lookup。
您需要添加对按钮的引用
{
xtype: 'filefield',
fieldLabel: 'Attach Items',
buttonText: 'Browse Items',
itemId : 'buttonid',
buttonConfig: {
id : 'uploadmailwidget0Btn',
},
reference: 'myButtonRef'
},
并在ViewController中使用该引用来使用lookup
并更改禁用值。
function() {
this.lookup('myButtonRef').setDisabled(true);
}
当然,我还没有使用ExtJS,但理论上这应该工作
答案 1 :(得分:1)
如ExtJS 6 documentation所示,setDisabled
方法是私有的,因此无法访问。
但是,我们可以做这样的事情。请记住,此解决方案并不聪明,但可行。 测试example fiddle。
Ext.application({
name : 'Fiddle',
launch : function() {
Ext.create('Ext.window.Window', {
title: 'Hello',
height: 200,
width: 400,
layout: 'fit',
items: [{
xtype: 'filefield',
id: 'fileid',
fieldLabel: 'Attach Items',
buttonText: 'Browse Items',
itemId: 'buttonid',
buttonConfig: {
id: 'uploadmailwidget0Btn'
}
}, {
xtype: 'button',
text: 'Click to set disable',
handler : myBtnHandler
}]
}).show();
}
});
var myBtnHandler = function(btn) {
if (Ext.getCmp('fileid').bodyElement.dom.childNodes[0].childNodes[2].childNodes[1].childNodes[0].childNodes[2].disabled)
{
btn.setText('Click to set disable');
Ext.getCmp('fileid').bodyElement.dom.childNodes[0].childNodes[2].childNodes[1].childNodes[0].childNodes[2].disabled = false;
}
else
{
btn.setText('Click to set enable');
Ext.getCmp('fileid').bodyElement.dom.childNodes[0].childNodes[2].childNodes[1].childNodes[0].childNodes[2].disabled = true;
}
}