我正在使用extjs 4.1并使用xtype:ptextfield创建了一个自定义字段容器,它是通过扩展“FieldContainer”创建的,它包含项目img和textfield,我想要的是访问 textfield值来自 ptextfield , fieldcontainer 。
Ext.onReady(function () {
Ext.define('PTextField', {
extend: 'Ext.form.FieldContainer',
alias: 'widget.ptextfield',
requires: ['Ext.form.TextField', 'Ext.Component'],
alias: 'widget.ptextfield',
height: 20,
width: 170,
fieldLabel: 'A',
labelAlign: 'top',
layout: {
type: 'hbox'
},
BLANK_IMAGE_URL: '',
initComponent: function () {
var me = this;
Ext.applyIf(me, {
items: [{
xtype: 'component',
height: 20,
width: 20,
autoEl: {
tag: 'img',
src: Ext.BLANK_IMAGE_URL
}
}, {
xtype: 'textfield',
itemId: 'textid',
width: 100
}]
});
this.callParent(arguments);
}
});
Ext.create('Ext.window.Window', {
title: 'Hello',
height: 400,
width: 400,
//layout: 'fit',
items: [{
xtype: 'ptextfield',
fieldLabel: 'First Name',
id: 'pcontainer1',
listeners: {
change: {
element: 'el', //bind to the underlying el property
fn: function () {
var me = this;
Ext.Ajax.request({
waitMsg: 'Saving changes...',
url: '/Home/SaveChanges',
jsonData: {
id: this.id,
value: this.down('#textid').getRawValue()
},
failure: function (response, options) {
Ext.MessageBox.alert('Warning', 'Oops...');
},
success: function (response, options) {
var text = response.responseText;
// process server response here
console.log('Changes saved successfully.');
}
});
}
}
}
}, {
xtype: 'ptextfield',
fieldLabel: 'Last Name',
id: 'pcontainer2'
}]
}).show();
});
在下面的行中,我在“this”中获得“ptextfield”字段容器,而“this.id”正在给我“pcontainer1” 但是我无法弄清楚如何获得位于“ptextfield”字段容器内的textfield的“值”。
我在以下行收到错误: jsonData:{id:this.id,value:this.down('#textid')。getRawValue()}
错误是 - this.down('#textid')为null(firebug) (铬) 未捕获的TypeError:无法调用null的方法'getRawValue' Ext.create.items.listeners.change.fn (匿名功能) Ext.apply.createListenerWrap.wrap
其中"this.down(#textid').getRawValue()"
应该给我textfield value
,我没有得到我无法遍历。
感谢任何帮助。
答案 0 :(得分:1)
为什么要监听容器的html元素的change事件?而不是说文本字段?
对于你来说,这种方式可能更简单:把它放在ptextfield上:
listeners: {
render: function(component) {
component.down('textfield').on('change', function() {
console.log(this, arguments);
// "this" is the textfield
// do your ajax here
});
}
}