2011-04-08 70 views
0

我延长ComboBox并在构造函数中有这样的代码:使用EXT-GWT组合框

ModelType type = new ModelType(); 
type.setRoot("data"); 
type.addField("id", "id"); 
type.addField("name", "name"); 

JsonLoadResultReader<ListLoadResult<ModelData>> reader = new JsonLoadResultReader<ListLoadResult<ModelData>>(type); 

RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, "/category/getall"); 
HttpProxy<String> proxy = new HttpProxy<String>(builder); 

BaseListLoader<ListLoadResult<ModelData>> loader = new BaseListLoader<ListLoadResult<ModelData>>(proxy, reader); 

ListStore<ModelData> store = new ListStore<ModelData>(loader); 


setStore(store); 
loader.load(); 
setValueField("id"); 
setDisplayField("name"); 
setName("categoty"); 

结果:AJAX查询发送到服务器,但没有结果在组合框中看到,当点击一遍,然后显示它加载数据它,以及如何设置组合框的值?

+0

在触发查询之前是否渲染了组合框?你尝试过调用layout()方法吗?我通常在调用load()之前设置值字段和显示字段,但从来没有使用过JSON对象 – questzen 2011-04-08 09:45:01

+0

是的,我尝试调用load()后窗口与该组合框渲染,同样的问题,你如何加载数据到组合框,并选择默认值? – 2011-04-08 09:51:31

回答

0

我已经创建了一个简单的存储工厂方法,可以解决您的问题。 拷贝到您的类并创建存储:

setStore(_createListStore("/category/getall", "data", "id", "name")); 
loader.load(); 
setValueField("id"); 
setDisplayField("name"); 
setName("categoty"); 

在你的代码中的错误是增加了两个领域的ModelType,而应该用“身份证”只添加一个字段值和“名称”为display

protected ListStore<ModelData> _createListStore(String url, String root, String fieldValue, String displayValue){ 
    ModelType mt = new ModelType(); 
    mt.setRoot(root); 
    mt.addField(displayValue, fieldValue); 
    RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, url); 
    HttpProxy<String> proxy = new HttpProxy<String>(rb); 
    JsonLoadResultReader<ListLoadResult<ModelData>> reader = new JsonLoadResultReader<ListLoadResult<ModelData>>(mt); 
    final BaseListLoader<ListLoadResult<ModelData>> loader = new BaseListLoader<ListLoadResult<ModelData>>(proxy, reader); 
    ListStore<ModelData> store = new ListStore<ModelData>(loader); 
    return store; 
}