2011-08-17 36 views
2

團隊,負載事件不在jsonstore射擊

我有一個jsonstore來加載我的列表。我正在使用內聯數據加載商店,而沒有任何代理配置。我想調用我的商店的加載事件。請讓我知道如何去做。

下面是我的店鋪代碼:

商店=新Ext.data.JsonStore的實踐例子({ 模式: 'SettingModel',

getGroupString:function(){ 
     return 'Set Duration'; 
     }, 
autoLoad:false,  
data: [ 
    {name: '5 mins', value: '5'}, 
    {name: '15 mins', value: '15'}, 
    {name: '25 mins', value: '25'}, 
    {name: '45 mins', value: '45'} 
], 
listeners : { 
    'load': function(){ 
     Ext.Msg.alert('App',"load"); 
    } 
}}); 

Store.load();

與上面的代碼我得到以下錯誤消息:「未捕獲的錯誤:您正在使用ServerProxy,但沒有提供一個URL」

如果我刪除「Store.load();」lin e,即時消息不會出錯,列表中正在填充數據。但是加載事件沒有被觸發。

請在這種情況下,幫助我如何使負載事件觸發。

由於提前

回答

2

負載事件不叫數據在線時。此外,加載方法只能在使用AJAX請求訪問數據時調用(這就是調用.load()方法時需要代理的url的原因)。

嘗試使用loadData方法加載內嵌的數據,而不是傳遞它的對象構造和datachanged事件,如果你希望每個loadData被調用時聽。

1

首先,你需要確保正在使用您的店鋪。你有autoLoad:false,所以它不會自行加載。你綁定它的組件必須加載它,或者你必須調用它的加載方法。此外,你應該檢查異常狀態。

通常你要在以下格式去:

listeners : { 
    load : { 
      fn : function(){ 
        Ext.Msg.alert('App',"load"); 
      }, 
      scope : this 
     }, 
    exception : { 
      fn : function(err){ 
        Ext.Msg.alert('App',"Oh Crap!"+err); 
      }, 
      scope : this 
     } 
} 

這樣你可以控制的功能和範圍,這是一個常見的問題,

2

分機似乎是推動商店與模型等使用 感覺就像,因爲你使用的是商店,它期望你做一個Ajax調用來獲取數據。 您可以通過指定代理覆蓋此:

 proxy: { 
      type: 'memory', 
      reader: { 
       type: 'json', 
       root: 'items' 
      } 
     }, 
直線從內線文檔店面

http://dev.sencha.com/deploy/touch/docs/

Ext.regModel('User', { 
fields: [ 
    {name: 'firstName', type: 'string'}, 
    {name: 'lastName', type: 'string'}, 
    {name: 'age',  type: 'int'}, 
    {name: 'eyeColor', type: 'string'} 
] 
}); 

哦,看,他們沒有記憶代理在當地的商店!

new Ext.data.Store({ 
model: 'User', 
data : [ 
    {firstName: 'Ed', lastName: 'Spencer'}, 
    {firstName: 'Tommy', lastName: 'Maintz'}, 
    {firstName: 'Aaron', lastName: 'Conran'}, 
    {firstName: 'Jamie', lastName: 'Avins'} 
] 
}); 

作爲一個有趣的獎金,JsonStore甚至沒有在觸摸文檔。

http://jsfiddle.net/6WV3m/3/是extjs 4.0的代碼,但它在我的觸摸本地工作。

1

pablodcar的答案應該真的爲你做。您可以使用空數據數組實例化您的商店,然後使用要加載的數據數組調用loadData()方法。如果您使用storeId啓動商店,然後使用Ext.data.StoreManager.lookup(storeId)查找該商店​​,則可以從任何地方調用此方法。

要在商店數據更改時得到通知,您可以收聽datachanged事件。