我正尝试使用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