GXTフレームワークを使用してかなり単純なGWTアプリケーションを作成しようとしています。これはeBook「Ext GWT 2.0初心者ガイド」に基づいています。それは、GXTのMVCモデルを使ってアプリケーションを構築するためのすべてのステップを詳述しています。そのほとんどは期待どおりに動作していますが、グリッドに新しい行を追加することはできません。GXTグリッドに行を追加する方法
グリッドデータの初期読み込み(itemStore、loader、およびRPCProxyが正しく動作します)。
ただし、新しい行の追加をトリガーするイベントが発生するたびに、追加したいListStoreは空です(nullではありませんが空です) - 初期ロード後にグリッドにデータが表示されていますが! ()(これは、このLayoutContainerが添加されたビュー)所有しているコンポーネントによって呼び出されている
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:
ここ関連するコードの一部です。
addMessage()メソッド内にブレークポイントを設定した場合、itemStoreのサイズは0になります(同じことについては、grid.getStore()と同じです)。
私はこのコードに様々な変更を加えましたが、まだ追加されている行を見ています。
同様の注意:addMessage()メソッドの内部では、プロキシからリロードを試みます。サーバー側のデータも更新します。 loader.load()、にも表示される効果はありません。
ローダーが機能し、グリッドにデータを入力しています。アプリが読み込まれるまでではなく、(テスト)ボタンをクリックしたMarketingServiceの既存のレコードがGridに表示され、addMessage()が呼び出されます。だから私はこれがあなたがちょうど言及したものと関連しているとは想像できません。 – uncrase
オクラホマ - 提供されたものからは分かりませんでした。グリッドにアイテムが表示されている場合、ストアにアイテムが残っています(addMessage呼び出しにアイテムが見えなくても)。おそらく誤ったストアが使用されている可能性があります。簡単な検証方法 - addMessageにステップインし、this.grid.attachedがtrueであることを確認します。そうであれば、どういうわけかグリッド、店舗を交換したり、変更を描画せずにグリッドをクリアする方法を見つけたりしています。 –
私はちょっとチェックしました... grid.attachedはaddMessage()メソッドを実行中にfalseとして表示されています。 – uncrase