2014-01-31 85 views
0

我想重寫隨關聯而來的getter方法(hasMany,belongsTo,hasOne)。看起來有點神奇的是正在創建實際獲取者的地方,並且在查看代碼之後,我不確定從哪裏開始。我查看了Ext.data.association.Association's constructor,但我無法推斷獲取者的創建位置。Ext JS:Override Association股票獲取者

所以我們可以說我有一個的hasMany關係,看起來像這樣:

hasMany: [ 
    {associationKey: 'services', name: 'getServicesStore', model: 'Service'}, 
    {associationKey: 'standards', name: 'getStandardsStore', model: 'Standard'} 
] 

當我打電話getServicesStoregetStandardsStore方法,我想輸出的東西到控制檯,但我想這兩種方法的輸出同樣的事情,所以我希望他們仍然繼承相同的Associations類,但是在某處重寫Associations代碼。

我知道我的例子可能有點愚蠢,但除控制檯日誌記錄外,我還有其他計劃。如果任何人都可以提供任何指導從哪裏開始,我將不勝感激!

來自Sencha forums的交叉帖子。

回答

1

米切爾Simoens評論我的煎茶螺紋與此:

爲你生成的方法,而不是真正的東西, 可以很容易地覆蓋吸氣。對於HasMany,它在 createStore中生成,因爲HasOne/BelongsTo位於createGetter中。這兩個 方法都會返回一個函數,這使得難以覆蓋以添加日誌或自定義代碼 。

所以,我的同事和我創建了「私人」的getter的名字,並僅在該模型中使用它們,就像這樣:

hasOne: [ 
    {associationKey: 'standard', getterName: '_getStandardModel', model: 'Standard'} 
], 
hasMany: [ 
    {associationKey: 'services', name: '_getServicesStore', model: 'Services'} 
], 

/** 
* Getter: returns the associations' Standard model 
* @return {Standard} standardModel 
*/ 
getStandardModel: function() { 
    var standardModel = this._getStandardModel(); 
    if (!standardModel) { 
    this.logError('standardModel is undefined'); 
    } 
    return standardModel ; 
}, 

/** 
* Getter: returns the associations' Services store 
* @return {Services} servicesStore 
*/ 
getServicesStore: function() { 
    var servicesStore = this._getServicesStore(); 
    if (!servicesStore) { 
    this.logError('servicesStore is undefined'); 
    } 
    return servicesStore ; 
} 

我們估計這是爲我所用的最佳實踐。