Ext.field.Text只是一个简单的输入框,如果有值被输入就会在尾部出现一个‘X’button,
如果想在text框上放上别的button,放上lable,图片什么的该如何扩展呢?
其父类Ext.field.Field继承了Ext.Decorator,也就是所有Ext.field.Field的子类都有Ext.Decorator的特性-
可以指定component.
拿最简单的text field来说,指定的component是input类,type是text.
也就是说text field的核心还是Ext.field.input类。
看一下源代码就会发现我们看到的输入框是通过重写Ext.Component的getTemplate实现的。
共有3个Item,input,clearIcon和mask.最初只有input显示,clearIcon也就是'x'button通过css(display:none)控制不让其显示,
直到有值输入才改变css(display:block)让其显示
----------------------------------------------------------------
getTemplate:function(){
var items =[{ reference:'input', tag:this.tag },{ reference:'clearIcon', cls:'x-clear-icon'}]; items.push({ reference:'mask', classList:[this.config.maskCls]
});
return items;
}
----------------------------------------------------------------
如果扩展该text field,一种方法是1)继承Ext.field.input类, 重写以上方法,指定需要加item的。
然后2)继承Ext.field.Text,指定component为1)创建的类。
还有一种方法是通过appendChild/replaceWith/insertAfter/insertBefore等方式将需要的element添加在需要的位置。
我想为text field添加一个'+'button,该button用来响应某个事件。
---------------------------------------------------------------------------------------------
Ext.define('MyAddField', {
extend: 'Ext.field.Text',
config: {
clearIcon: false,
addButton: true //add button配置属性
},
。。。
//实例化该类时会自动执行该方法
//通过Ext.Element.create方法创建了Ext.Element对象,然后就爱那个该对象append到当前(input field)element上
updateAddButton: function(newButton, oldButton) {
var me = this,
innerElement = me.innerElement;
if (newButton != oldButton) {
if (newButton) {
this.addButton = Ext.Element.create({
cls : cls + '-button ' + cls + '-button-up',
html: '+'
});
this.addButton.on('tap',this.onAddButton)
innerElement.appendChild(me.addButton);
}
}
}
。。。
})
---------------------------------------------------------------------------------------------
Sencha Touch2.1的replaceWith方法有bug,需要将其修正,重写如下:
--------------------------------------------------------------------------------------------
Ext.dom.Element.addMembers({
replaceWith: function(el) {
var me = this;
if (el.nodeType || el.dom || typeof el == 'string') {
//el = Ext.get(el);
//me.dom.parentNode.insertBefore(el, me.dom);
//将el改成el.dom
me.dom.parentNode.insertBefore(el.dom, me.dom);
} else {
el = Ext.core.DomHelper.insertBefore(me.dom, el);
}
delete Ext.cache[me.id];
Ext.removeNode(me.dom);
me.id = Ext.id(me.dom = el);
return me;
}
});
--------------------------------------------------------------------------------------------
浙公网安备 33010602011771号