2010-06-25 112 views
0

我想創建我自己的日期/時間字段。我知道其他人已經做了一些,我正在做我自己的。ExtJS面板繼承/基類

我的問題如下。我想創建一個新的對象DateTime,它擴展了Ext.Panel。我爲寬度,高度等指定了一些屬性,但我還指定了包含日期字段和時間字段的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 

回答

1

您的類缺少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')); 
+0

謝謝!這很棒,我從StackOverflow獲得了更快的響應,然後從我們支付的實際ExtJS支持中獲得了更快的響應。 – extnoob 2010-06-25 18:54:47

+0

只是好奇,爲什麼我不得不調用initComponent並在其中使用Ext.apply來完成此操作?爲什麼我原來的帖子不能運作?想知道,所以我可以記住未來的基礎班。 – extnoob 2010-06-25 20:57:08

0

作爲您的直接問題之外的註釋,「DateTime」是面板子類的可怕名稱。你希望稍後有人知道他們正在處理什麼樣的類 - 根據你使用它的方式,「DateTimeField」會更好(儘管這意味着Field子類如下所述...)。

但是,請注意,另一個潛在的問題,因爲你打算使用這個面板作爲一個字段是一個FormPanel會希望其表單字段支持Ext.form.Field接口,你的「字段」不會(即你將無法將您的DateTime對象添加到表單的items配置中)。因此,如果您的目標是創建一個真正可重用的組件,並將其視爲字段,那麼您需要添加getValuesetValuemarkInvalid等與您的組成字段進行內部交互的方法。讓這一切順利進行並不是一項微不足道的任務。

(不知道這是你的目標,但是我想我會提到它,因爲我自己走了這條路)。

+0

感謝您的反饋。你是對的,不像我想象的那麼簡單。我不得不爲這個面板實現一個領域的所有常見的預期方法。 – extnoob 2010-06-28 21:46:39