Я пытаюсь создать довольно просто приложение GWT с использованием платформы GXT, и делаю это на основе книги «Руководство для начинающих GWT 2.0». Он описывает все шаги для создания приложения с использованием модели MVC GXTs, и большая часть из них работает так, как ожидалось, однако я не могу - для ее жизни - добавлять новые строки в свою Grid.Как добавить строки в сетку GXT
Начальная загрузка данных грида (с помощью 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(), он также не имеет видимого эффекта.
Погрузчик функционирует и заполняет сетку. Пока приложение не загрузилось, и Grid отображает существующие записи из MarketingService, которые я нажимаю на кнопку (test), которая, в свою очередь, вызывает вызов addMessage(). Поэтому я не могу себе представить, что это связано с тем, что вы только что упоминали. – uncrase
Хорошо - было трудно сказать, что было предоставлено. Если в сетке видны элементы, то в хранилище все еще есть элементы (даже если вызов addMessage не видит элементов), что говорит о том, что, возможно, используется неправильный магазин - возможно, даже неправильный экземпляр MessageGrid. Легкий способ проверить - перейдите в addMessage и убедитесь, что this.grid.attached - true. Если это так, то каким-то образом вы либо торгуете сетками, либо хранилищами, либо нашли способ очистить сетку без внесения изменений. –
Я только что проверил ... grid.attached показывается как ложный, переходя через метод addMessage(). – uncrase