2014-05-23 56 views
0

這裏是超類:延長Ext.data.Store

Ext.define('My.store.Direct', { 
    extend: 'Ext.store.Direct', 
    paramsAsHash: true, 
    proxy: { 
     reader: { 
      type: 'json', 
      root: 'data', 
      totalProperty: 'total' 
     }, 
     type: 'direct', 
    } 
}); 

在子類中,我只需要設置API配置。我想:

Ext.define('My.store.User', { 
     extend: 'My.store.Direct', 
     model: 'My.model.User', 
     storeId: 'user', 
     constructor: function() { 
      this.callParent(arguments); 
      this.getProxy().api.read = RPC.UserApi.read; 
     }} 
); 

Ext.define('My.store.Post', { 
     extend: 'My.store.Direct', 
     model: 'Mehr.model.Post', 
     storeId: 'post', 
     constructor: function() { 
      this.callParent(arguments); 
      this.getProxy().api.read = RPC.PostApi.read; 
     }} 
); 

不幸的是,在執行代碼後都店將有第子類的api.read。它有什麼問題?什麼是擴展stroes的正確方法?

回答

1

在構造函數中創建代理,否則代理轉到My.store.Direct的原型,並且因爲它是一個對象,而不是原始類型(int,string,bool),所以它通過引用進行訪問。因此,在一個實例中更改代理會更改所有實例 - 實際上只有一個代理。

所以基類應定義與此類似

Ext.define('My.store.Direct', { 
    extend: 'Ext.data.DirectStore', 
    paramsAsHash: true, 
    constructor:function(config) { 
     Ext.merge(config, {proxy: { 
     reader: { 
      type: 'json', 
      root: 'data', 
      totalProperty: 'total' 
     }, 
     type: 'direct' 
    } 
    }); 
     this.callParent([config]); 
    } 
}); 
+0

我只需要更改擴展存儲中的'api.read'配置。我怎麼能在構造函數中做到這一點? – PHPst

+0

更新了答案,看看。 – Saki

+0

Thnaks很多。我也編輯了使用'Ext.merge()'的答案。我也想創建一個基礎網格類和一些具有不同列的子類。我應該遵循類似的方法嗎? – PHPst