ExtJS面板继承/基类
我正在尝试创建自己的日期/时间字段。我知道有一些是别人做的,我正在做我自己的 我的问题如下。我想创建一个新对象DateTime,它扩展了Ext.Panel。我为宽度、高度等指定了一些属性,但也为items属性指定了值,该属性将包含一个日期字段和一个时间字段。当我试图实际实例化所创建的对象时,我会收到一个错误,上面写着“不支持对象或属性”。当我进入错误时,似乎items集合抛出了一个错误代码如下:ExtJS面板继承/基类,extjs,Extjs,我正在尝试创建自己的日期/时间字段。我知道有一些是别人做的,我正在做我自己的 我的问题如下。我想创建一个新对象DateTime,它扩展了Ext.Panel。我为宽度、高度等指定了一些属性,但也为items属性指定了值,该属性将包含一个日期字段和一个时间字段。当我试图实际实例化所创建的对象时,我会收到一个错误,上面写着“不支持对象或属性”。当我进入错误时,似乎items集合抛出了一个错误代码如下: var dateField = new AppealDate({ id: 'dateFiel
var dateField = new AppealDate({
id: 'dateField',
tabIndex: 0,
fieldLabel: '',
msgTarget: 'under'
});
var timeField = new Ext.form.TimeField({
id: 'timeField',
tabIndex: 0,
fieldLabel: '',
msgTarget: 'under'
});
var DateTime = Ext.extend(Ext.Panel, {
id: '',
xtype: 'panel',
fieldLabel: '',
layout: 'table',
layoutConfig: {
columns: 2
},
items: [dateField, timeField]
});
var dateTimeField = new DateTime(); //this throws an error
您的类缺少initComponent。您还需要在某个位置渲染面板
DateTime = Ext.extend(Ext.Panel, {
initComponent: function() {
// define dateField, timeField here.
this.dateField = new AppealDate({
id: 'dateField',
msgTarget: 'under'
});
this.timeField = new Ext.form.TimeField({
id: 'timeField',
msgTarget: 'under'
});
Ext.apply(this, {
items: [this.dateField, this.timeField]
});
DateTime.superclass.initComponent.call(this);
}
});
var dateTimeField = new DateTime();
dateTimeField.render(Ext.get('someDiv'));
作为直接问题之外的评论,“DateTime”对于Panel子类来说是个糟糕的名字。您希望稍后有人知道他们正在处理什么类型的类--“DateTimeField”会更好,这取决于您如何使用它(尽管这意味着一个
字段子类,如下所述…)
但是,请注意,由于您打算将此面板用作字段,另一个潜在问题是FormPanel希望其表单字段支持Ext.form.Field
接口,而您的“字段”将不支持该接口(即,您将无法将DateTime对象添加到表单的项
配置)。因此,如果您的目标是创建一个真正可重用的组件,可以将其视为一个字段,那么您需要添加一些方法,如getValue
、setValue
、markInvalid
,等等,这些方法在内部与组成字段交互。让一切顺利进行不是一件小事
(不确定这是否是你的目标,但我想我会提一下,因为我自己也走过这条路)。谢谢!这太棒了,我从StackOverflow得到的响应比我们付费的实际ExtJS支持更快。只是好奇,为什么我必须调用initComponent并在其中使用Ext.apply来完成这项工作?为什么我原来的帖子不起作用?我想知道,这样我可以记住未来的基类。谢谢你的反馈。你说得对,不像我想的那么简单。我必须为这个面板实现一个字段的所有常见预期方法。