我有一個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']
});
所有的記錄,當我加載它們,都標phantom
。 phantom
不適用於JsonStore?我是否應該用另一種方式去做?
ETA再次:好的,找到它了。我沒有在我的JsonStore構造函數上設置idProperty
屬性,這意味着記錄沒有ID,這意味着它們始終是phantom
。現在我的新記錄顯示phantom
,而已經在數據庫中的記錄沒有。真厲害!
+1,但您不必執行跟蹤。它已經可以作爲record.phantom這是非常正確的,除非記錄是由讀者創建的。 – 2011-04-04 22:51:00
+1 Kevin。接得好。 – 2011-04-04 23:14:00
凱文,如果你提出了全面的答案,我會接受它。這正是*我希望找到的。 – Coderer 2011-04-04 23:20:04