【发布时间】:2013-03-21 18:40:56
【问题描述】:
我对自定义 Extjs 触发字段很感兴趣,我想知道执行以下操作的最佳方法是什么(请原谅文本图)(方括号代表元素):
[field label] [trigger element] [button]
它基本上是一个触发器字段,其末尾附加了一个小按钮。我希望只是扩展触发字段,并可能通过 fieldSubTpl 添加按钮,即:
fieldSubTpl: [
'<input id="{id}" type="{type}" ',
'<tpl if="name">name="{name}" </tpl>',
'<tpl if="size">size="{size}" </tpl>',
'<tpl if="tabIdx">tabIndex="{tabIdx}" </tpl>',
'class="{fieldCls} {typeCls}" autocomplete="off" />',
'<div id="{cmpId}-triggerWrap" class="{triggerWrapCls}" role="presentation">',
'{triggerEl}',
'{buttonEl}', <--- New Button Element
'<div class="{clearCls}" role="presentation"></div>',
'</div>',
{
compiled: true,
disableFormats: true
}
]
我现在希望能够在字段的构造函数中创建一个 Ext.Button,并以某种方式将它用于 {buttonEl}。 完整示例:
Ext.define("Ext.ux.NewField", {
extend: "Ext.form.field.Trigger",
constructor: function(config) {
config.newButton = Ext.create("Ext.button.Button", {
/** ... button configs ... **/
});
Ext.applyIf(config, {
fieldSubTpl: // as shown above
});
this.callParent([config]);
},
initComponent: function() {
this.callParent();
this.newButton.on("click", this.__onButtonClick, this);
},
getSubTplData: function() {
var obj = this.callParent(arguments);
obj.buttonEl = this.newButton.??????? <-- This is what I can't figure out
return obj;
},
__onButtonClick: function() {
// ...
}
});
如何应用默认的 Ext 按钮配置以及我在按钮构造函数中覆盖的那些?这甚至可能吗,还是我在这里使用模板完全错误?
再次,我想保持 Ext 字段的“is-a”关系,因此仅将触发器字段和按钮包装在 Ext.container.Container 中对我来说是不可能的。
感谢您的任何帮助或建议。
【问题讨论】:
-
您要问的内容有点令人困惑。您想要您创建的按钮的 HTML 吗?如果是这种情况,请使用
button.getEl().getHTML() -
将它包装在容器中是最好的解决方案,你能详细说明为什么它不可能吗?
-
@Evan Trimboli 该字段需要保留Extjs字段api。如果我们不必全部重新实现它会更好。
-
@VarunAchar 在调用“getSubTplData”时,未呈现按钮元素,因此 getEl() 返回未定义。也许这不是这样做的方法......?是否有与从 Trigger 扩展完全不同的方法来实现此字段结构?
-
如果你看一下
form.field.Fieldmixin,实际上并没有太多的实现,你基本上只需将这些调用级联到实际的字段。
标签: javascript extjs field custom-component