2013-03-28 19 views
3

下面從控制器更改存儲API是我MyStore.js在ExtJS的

Ext.define('MyApp.store.MyStore', { 
    extend: 'Ext.data.Store', 
    model: 'MyApp.model.Note', 
    autoLoad: true, 
    proxy: { 
     type: 'ajax', 
     api: { 
      /* I want to change the following two filepaths */ 
      read: 'data/notesMar2013.json', 
      update: 'data/notesMar2013.json' 
     }, 
     reader: { 
      type: 'json', 
      root: 'data', 
      successProperty: 'success' 
     } 
    } 
}); 

我想如下通過控制器改變的MyStore的apireadupdate值:

var notesStore = Ext.getStore('MyStore'); 
notesStore.on('load',function(notesStore){ 
     var proxy = notesStore.getProxy(); 
     Ext.apply(proxy.api,{ 
      /* Changing the file paths here */ 
      read: 'data/notesApr2013.json', 
      update: 'data/notesApr2013.json' 
     }) 
     notesStore.load();        
},this,{single:false}); 
// 
console.log(notesStore); 

通過使用上述功能,我試圖更新MyStore,但沒有發生。當我檢查鉻控制檯的值成功改變,但不更新或覆蓋商店,即使我使用notesStore.load()。可能是什麼問題呢?

我提到以下鏈接

:該代碼是工作的罰款。讓我解釋一下我的問題:我在商店裏展示了一個容器中的內容,最初,容器中充滿了一些內容,並且高度是固定的。如果我甚至將任何內容添加到容器中,那麼隨着容器具有固定高度,它將變得隱藏。到目前爲止,內容是追加到默認內容,而不是刪除默認內容,然後添加。這是實際的問題。

回答

2

這應該沒有任何問題,因此你有任何其他問題的錯誤。請看看這個JSFiddle中的控制檯。在這裏我使用的測試代碼

Ext.define('MyApp.model.Note',{extend:'Ext.data.Model'}); 
Ext.define('MyApp.store.MyStore', { 
    extend: 'Ext.data.Store', 
    model: 'MyApp.model.Note', 
    proxy: { 
     type: 'ajax', 
     getUrl: function(request) { 
      console.log('fetched request url'); 
      console.log(this.api[request.action]); 
      return request.url || this.api[request.action] || this.url; 
     }, 
     api: { 
      /* I want to change the following two filepaths */ 
      read: 'data/notesMar2013.json', 
      update: 'data/notesMar2013.json' 
     }, 
     reader: { 
      type: 'json', 
      root: 'data', 
      successProperty: 'success' 
     } 
    } 
}); 
var store = Ext.create('MyApp.store.MyStore'); 
console.log('The origin API'); 
console.log(store.getProxy().api); 
store.load(); 
var proxy = store.getProxy(); 
var newApi = {read: 'data/2013.json', update: 'data/2013.json' }; 
Ext.apply(proxy.api,newApi); 
console.log('The changed API'); 
console.log(store.getProxy().api); 
store.load(); 
+0

感謝您的回覆。是的,我的代碼正在更改變量,但未更新舊商店(它顯示的值與您在小提琴中顯示的值相同,但無法更新或覆蓋舊商店)。無論如何,我會按照你的建議看待其他問題。 – 2013-03-28 07:30:26

+0

@Mr_Green請注意,我從代理創建了一個實例重寫'getUrl:function(request)'方法來獲取代理將用於此請求的url。但是您也可以在失敗的請求中看到該商店使用了正確的api,即使在更改之後 – sra 2013-03-28 07:36:23

+0

我剛剛將您的代碼複製到了我的項目中。仍然沒有更新或覆蓋。看起來我一如既往在做一些愚蠢的錯誤。 – 2013-03-28 07:52:34