2011-04-04 23 views
2

我有一個ExtJS接口來解決一個問題我確信以前有過。我有一個公開項目列表的服務,我需要在GridPanel中顯示該列表。我有這部分工作。當我點擊其中一個項目時,我在GridPanel的SelectionModel中處理selectionchange事件,並使用它從另一個REST調用加載資源的細節。如何將項目添加到ExtJS GridPanel而不觸發selectedchanged事件

現在,我希望能夠添加一個新的項目。這看起來應該很簡單,但我想將項目添加到GridPanel中,同時清除「細節」字段,以便用戶可以輸入新的細節並保存完整的項目。我有一個添加按鈕,它會創建一個提示輸入項目名稱。

現在,我將此項添加到GridPanel的支持數據存儲(JsonStore,如果有的話)並使用getSelectionModel().selectLastRow()來突出顯示它。當然,這會觸發selectionchange事件,該事件要加載(不存在的)項目的詳細信息。我嘗試過使用.purgeListeners(),進行selectLastRow()調用,然後恢復selectionchange偵聽器,但由於某種原因,更改後的事件仍然會觸發 - 實際上UI中沒有任何症狀,但是我可以看到Firebug它正在爲項目詳細信息製作(失敗)GET調用。

我想阻止這種情況發生,我覺得這應該是一個常見/簡單的問題,但我一直無法找到解決方案。什麼是正確的方式來添加一個新的項目到GridPanel,而不讓你的代碼在保存之前嘗試「查找」該項目?

ETA:一位評論者指出Record對象上有一個phantom屬性,這聽起來像是一個想要的東西。然而,當我在列表載入我的項目列表作爲

STORE = new Ext.data.JsonStore({ 
    autoLoad: true, 
    url: 'items' 
    method: 'GET', 
    storeId: 'store', 
    root: 'list', 
    remoteSort: false, 
    fields: ['name'] 
}); 

所有的記錄,當我加載它們,都標phantomphantom不適用於JsonStore?我是否應該用另一種方式去做?

ETA再次:好的,找到它了。我沒有在我的JsonStore構造函數上設置idProperty屬性,這意味着記錄沒有ID,這意味着它們始終是phantom。現在我的新記錄顯示phantom,而已經在數據庫中的記錄沒有。真厲害!

回答

2

我寧願這樣做,而不會弄亂我已經設置的事件鏈或處理程序。

一個簡單的方法沿着線似乎 - 「不知何故弄不清在selectionchange監聽器選擇的記錄是否是一個持久的一個或沒有(還)」

的「搞清楚」部分可以通過檢查record。通過Kevin在下面評論中建議的豚鼠實現

+1

+1,但您不必執行跟蹤。它已經可以作爲record.phantom這是非常正確的,除非記錄是由讀者創建的。 – 2011-04-04 22:51:00

+0

+1 Kevin。接得好。 – 2011-04-04 23:14:00

+0

凱文,如果你提出了全面的答案,我會接受它。這正是*我希望找到的。 – Coderer 2011-04-04 23:20:04

相關問題