2013-04-29 52 views
1

我有一個CellList與SingleSelectionModel,我的使用情況是:CellList永遠記住後刷新新數據舊的選擇,即使清除舊的選擇

  1. 用戶選擇CellList一行(oldProxy)。
  2. 用戶創建一個代理(newProxy)併發送到服務器。
  3. 客戶端收到成功響應,CellList開始向服務器請求最新的數據。
  4. CellList填充最新的數據,並且步驟1中的行仍處於選中狀態。

,但我想選擇在步驟4中的最新行,我用

selectionModel.setSelected(newProxy); 

,但似乎它不工作,仍然在步驟1中選擇行。

我試過第2步之前取消該行:

selectionModel.setSelected(oldProxy, false); 

但最終仍然選擇在步驟1中的行,它的怪異。有關於此的任何想法?

+0

你確定這是關於選擇,而不是_「鍵盤選擇」_?你嘗試過調試嗎? (例如在選擇模型的isSelected中設置一個斷點並查看傳入的值和callstack) – 2013-04-30 08:06:54

+0

你好,這不是關於「鍵盤選擇」,我嘗試調試,在我的CellList填充新數據後調用'selectionModel .setSelected(newProxy)'但是在probelm中是在SingleSelectionModel中的resolveChanges()中,它立即返回,因爲newSelectionPending是false。我認爲這是因爲CellList只是選擇舊的選定行。我會盡量在一個工藝項目中重現它。 – Mike 2013-05-01 03:08:03

+0

嗨,托馬斯,作爲你的提示,根本原因是「鍵盤選擇」,我調試了很長的'resolvePendingState()' – Mike 2013-05-02 06:18:37

回答

0

原來是一個已知的GWT issue6310,禁用KeyboardSelectionPolicy,它只是工程,我除外,感謝托馬斯爲他的偉大的提示和大衛的鏈接。

0

確保您將密鑰提供者(接口ProvidesKey)傳遞給SingleSelectionModel構造函數。如果您不使用密鑰提供程序,它可能會在代理上使用equals()來嘗試查找匹配項,但由於您已從服務器請求新實例,因此舊實例不會與任何新實例匹配。

您可以在GWT文檔中找到示例here

參見:Select element in CellList using SelectionModel or ListDataProvider

+0

感謝大衛,我確實使用GWT內建'EntityProxyKeyProvider' – Mike 2013-04-30 01:59:23