Я пытаюсь создать довольно простое приложение GWT с использованием среды GXT, и я делаю это на основе электронной книги «Руководство для начинающих Ext GWT 2.0». В нем подробно описаны все этапы создания приложения с использованием модели GXT MVC, и большинство из них работает должным образом, однако я не могу - на протяжении всего срока службы - добавлять новые строки в свою таблицу.
Первоначальная загрузка данных таблицы (через itemStore, загрузчик и RPCProxy работает правильно).
Однако каждый раз, когда я запускаю событие, которое инициирует добавление новой строки, ListStore, к которому я хочу добавить, пуст (не нулевой! Но пустой) - даже если моя сетка показывает данные после начальной загрузки!
Вот некоторые из соответствующих кодов:
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 (), он также не имеет видимого эффекта.