Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ExtJS面板继承/基类_Extjs - Fatal编程技术网

ExtJS面板继承/基类

ExtJS面板继承/基类,extjs,Extjs,我正在尝试创建自己的日期/时间字段。我知道有一些是别人做的,我正在做我自己的 我的问题如下。我想创建一个新对象DateTime,它扩展了Ext.Panel。我为宽度、高度等指定了一些属性,但也为items属性指定了值,该属性将包含一个日期字段和一个时间字段。当我试图实际实例化所创建的对象时,我会收到一个错误,上面写着“不支持对象或属性”。当我进入错误时,似乎items集合抛出了一个错误代码如下: var dateField = new AppealDate({ id: 'dateFiel

我正在尝试创建自己的日期/时间字段。我知道有一些是别人做的,我正在做我自己的

我的问题如下。我想创建一个新对象DateTime,它扩展了Ext.Panel。我为宽度、高度等指定了一些属性,但也为items属性指定了值,该属性将包含一个日期字段和一个时间字段。当我试图实际实例化所创建的对象时,我会收到一个错误,上面写着“不支持对象或属性”。当我进入错误时,似乎items集合抛出了一个错误代码如下:

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来完成这项工作?为什么我原来的帖子不起作用?我想知道,这样我可以记住未来的基类。谢谢你的反馈。你说得对,不像我想的那么简单。我必须为这个面板实现一个字段的所有常见预期方法。