我需要禁止在Ext.window.Window中编辑文本字段,前提是下拉列表的值设置为“推迟”。
我正在尝试在filterCombo函数中执行以下操作:
var inp = this.up ('window'). down ('# MyTextField');
inp.disable ();
但是在控制台中出现错误: TypeError:this.up不是函数
我在做什么错? 下面是我的代码:
var store = Ext.create('Ext.data.Store', {
fields: ['order', 'id', 'name'],
storeId: 'DoubleBookStore',
data : [
{"id": 23, name: "New", order_install: 1},
{"id": 24, name: "In Work", order_install: 2},
{"id": 29, name: "Postponed", order_install: 3},
{"id": 34, name: "Shipped", order_install: 4},
{"id": 31, name: "In_transit", order_install: 5}
]
});
function filterCombo(combobox, records) {
if(records.data.name == 'Postponed'){
var inp = this.up('window').down('#MyTextField');
console.log(inp);
inp.disable();
}
index = records.data.order_install;
store = combobox.getStore();
store.clearFilter();
store.filterBy(
function(record) {
if ((record.internalId == index - 1) || (record.internalId == index) || (record.internalId == index + 1)) {
return true;
} else {
return false;
}
}
);
};
var window = Ext.create('Ext.window.Window', {
title: 'Приложение',
width: 300,
height: 200,
items:[{
xtype: 'combobox',
fieldLabel: 'Status',
name: 'status',
store: store,
valueField: 'id',
displayField: 'name',
typeAhead: true,
queryMode: 'local',
value: 24,
listeners: {
select : function(combo, records) {
filterCombo(combo, records);
}
}
},
{
xtype: 'textfield',
fieldLabel: 'Ваше имя:',
itemId:'MyTextField',
name: 'name'
}]
});
window.show();
答案 0 :(得分:1)
您不能在select函数的范围之外使用“ this”,您已经将“ this”作为参数“ combobox”传递了,所以请像这样使用它:
function filterCombo(combobox, records) {
var inp = combobox.up('window').down('#MyTextField');
if(records.data.name == 'Postponed'){
inp.disable();
} else {
inp.enable();
}
...
答案 1 :(得分:1)
在定义filterCombo方法时,将其视为全局范围。这就是为什么没有this.up的原因,因为这里是全局的。
要使代码正常工作,您需要在调用函数时传递作用域,只需替换
listeners: {
select : function(combo, records) {
filterCombo(combo, records);
}
}
与
listeners: {
select : function(combo, records) {
filterCombo.apply(this,[combo, records]);
}
}
请注意使用apply来更改您方法中的行为。
答案 2 :(得分:0)
解决方案:
function filterCombo(combobox, records) {
if (records.data.name == 'Postponed'){
var inp = combobox.up('window').getComponent('MyTextField');
console.log(inp);
inp.disable();
}
...
});
说明:
您要做的是获取对您的textfield
的引用,然后将其禁用。
texfield
配置使用itemId
,因此您必须使用texfield的容器getComponent()
方法textfield
容器,请使用combobox.up('window')
,而不是this.up('window')