2012-11-12 58 views
5

我有一個存儲加載方法,它通過ajax請求返回數據。我可以看到,數據被使用螢火蟲回來了,但我的成功處理程序是沒有得到所謂:Extjs存儲加載成功處理程序未被觸發

this.getCategoriesStore().load({params:{'id':d.data.category_id}}, { 
     success: function(category) { 
      console.log("Category: " + category.get('name')); 
     }, 
     error: function(e) { 
      console.log(e); 
     } 
    }); 

我用數據恢復成功的參數,沿:

{"success":true,"categories":{"id":5,"name":"Frying","section_id":2}} 

有什麼錯過了還是我做錯了什麼?

回答

20

好吧,我想你正在尋找這樣的:

store.load({ 
    params:{'id':d.data.category_id}, 
    scope: this, 
    callback: function(records, operation, success) { 
     if (success) { 
      console.log("Category: " + category.get('name')); 
     } else { 
      console.log('error'); 
     } 
    } 
}); 

這不是在API您額外PARAMS可以放在那裏了那麼明顯。但ExtJS經常使用配置對象來包裝。

編輯回答評論:

簡短的回答是:

現在更長的版本: 在商店的情況下,它是由你來直接提供匿名(或混凝土)回調或註冊事件。兩者在你的情況下都會一樣。

但是你可以只有一個回調,而你可以有很多事件。在進一步的場景中,您會發現事件適合得多的情況或事件是唯一方式的情況。當你傾聽時,情況總是如此。以下是一些注意事項:

  • 當您只需要一次回調時使用{single:true}屬性。示例:store.on('load', function(s) { /* do something*/ }, scope, { single: true })偵聽器在被調用後將被刪除。這是使用匿名函數的必要原因,無法刪除。
  • 利用mon()在大多數情況下,您可以直接在類定義中綁定偵聽器,以確保偵聽器隨類的實例一起被銷燬。

兩者都會爲您節省瀏覽器內存。

+0

有用的額外信息,謝謝。我可以問我裝貨的方式是否正確?我在控制器中加載了3個商店,並且此方法似乎是自動生成的。我仍然熟悉語法 - 對我來說,this.store.Categories.load()看起來更明顯,但顯然並非如此! – BrynJ

+0

@BrynJ好吧,我會更新我的帖子,提供一些關於回調和聽衆的更多信息。 – sra

+0

只是注意到我在代碼中錯誤地放置了大括號 - 我非常確定我也嘗試過回調作爲我的處理程序的屬性名稱......在這種情況下,希望這會起作用:) – BrynJ

6

試試這個:

store.load({ 
    scope: this, 
    callback: function(records, operation, success) { 
     // the operation object 
     // contains all of the details of the load operation 
     console.log(records); 
    } 
}); 

http://docs.sencha.com/ext-js/4-1/#!/api/Ext.data.Store-method-load根據文檔沒有成功和錯誤回調。

提供回調的另一種替代方法是,您也可以在商店中添加一個「加載」事件偵聽器來獲得相同的效果。

+0

感謝您的回覆。你可以提供更多的上下文 - 當前的調用是在一個控制器函數內......我不確定這將如何實現? – BrynJ

+0

與你的「成功」塊相同,只是「回調」,而不是:) – dbrin

+0

啊,我明白了,我會再試一次 – BrynJ

相關問題