我正嘗試使用GXT框架創建一個相當簡單的GWT應用程序,並且正在基於電子書「Ext GWT 2.0初學者指南」進行此操作。它詳細介紹了使用GXT的MVC模型構建應用程序的所有步驟,其中大部分步驟都按預期工作,但我無法 - 在其生命週期中 - 向我的網格添加新行。如何將行添加到GXT網格
Grid數據的初始加載(通過itemStore,loader和RPCProxy正常工作)。但是每次我觸發添加新行的事件時,我想要添加的ListStore都是空的(不爲空!但是爲空) - 即使我的Grid在初始加載後顯示數據!
下面是一些有關的代碼的:
public class MessageGrid extends LayoutContainer {
private final Grid<ModelData> grid;
private final ListLoader<ListLoadResult<MarketingMessage>> loader;
private final ListStore<ModelData> itemStore;
public MessageGrid() {
setLayout(new FitLayout());
final MarketingServiceAsync marketingService = Registry.get(MarketingUIConstants.MARKETING_SERVICE);
RpcProxy<List<MarketingMessage>> proxy = new RpcProxy<List<MarketingMessage>>() {
@Override
protected void load(Object loadConfig, final AsyncCallback<List<MarketingMessage>> callback) {
marketingService.getMessages(callback);
}
};
final List<ColumnConfig> columns = new ArrayList<ColumnConfig>();
columns.add(new ColumnConfig("col1", "Name", 100));
columns.add(new ColumnConfig("col2", "Phone", 100));
final ColumnModel columnModel = new ColumnModel(columns);
loader = new BaseListLoader<ListLoadResult<MarketingMessage>>(proxy);
itemStore = new ListStore<ModelData>(loader);
grid = new Grid<ModelData>(itemStore, columnModel);
grid.setBorders(true);
grid.setAutoExpandColumn("sentTime");
grid.setAutoHeight(false);
grid.setHeight("100%");
}
@Override
protected void onRender(Element parent, int index) {
super.onRender(parent, index);
loader.load();
add(grid);
}
public void addMessage(MarketingMessage marketingMessage) {
itemStore.add(new MarketingMessage("test", "test")));
}
}
方法addMessage()是由所屬組件調用(一個這篇LayoutContainer已被添加到其中)。
如果我在addMessage()方法中設置了一個斷點,我的itemStore的大小爲0(同樣適用於grid.getStore())。
我已經嘗試了對這段代碼的各種不同的更改,我還沒有看到正在添加的行。
在類似的說明:如果在addMessage()方法內,我嘗試從代理重新加載 - 因爲我也更新服務器端數據 - 即。 loader.load(),它也沒有任何可見的效果。
加載程序正在運行並填充網格。直到應用程序加載完畢,Grid纔會顯示MarketingService中的現有記錄,然後單擊(測試)按鈕,然後觸發addMessage()的調用。所以我無法想象這與你剛纔提到的有關。 – uncrase 2012-01-12 22:37:00
好的 - 很難從提供的內容中知道。如果網格中的項目可見,那麼商店仍然有項目(即使addMessage調用沒有看到任何項目),這表明可能正在使用錯誤的存儲 - 甚至可能是MessageGrid的錯誤實例。簡單的方法來驗證 - 步入addMessage,並確保this.grid.attached是真實的。如果是這樣,那麼不管怎樣,你都要交易網格,商店,或者找到了一種方法來清除網格而不用繪製更改。 – 2012-01-12 23:10:53
我剛剛檢查過... grid.attached在通過addMessage()方法時顯示爲false。 – uncrase 2012-01-12 23:24:20