首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法刷新GXT ListField

无法刷新GXT ListField
EN

Stack Overflow用户
提问于 2013-08-08 17:34:18
回答 1查看 400关注 0票数 0

概述:

我使用一个动态的GXT ListField来列出DB中某个位置的所有审批者,并预选所选的审批者(isSelected==true)。

问题:

看起来存储区有正确的数据,并在列表中选择正确的序号,但是可见ListField中的数据仍然显示第一次加载ListField时的数据。我无法刷新列表UI以显示来自第二个位置的项目。

示例:

Location1:

所有approvers={a,b,c,d,e,f,g,h,i,j} 选定批准人= {a,b,c} display={a,b,c,d,e,f,g,h,i,j}其中[] = selected

Location2:

全approvers={x,y,z,l,m,n,o,p,q,r} 选定批准人= {x,y,z,l} display={a,b,c,d,e,f,g,h,i,j},其中[] =选定的(错误!) 预期= {x,y,z,l,m,n,o,p,q,r} 注意:它现在选择了4,这意味着它使用了正确的存储,显示仍然显示location1数据:(

代码:

代码语言:javascript
复制
ListField<Approver>() approversListField ;

    OnModuleload() //..not including for simplicity
    {
    :

    panel.add(getInitialApproverList());
    loadApprovers(1);
    loadApprovers(2);
    }

        private Widget getInitialApproverList() {

            approversListField = new ListField<Approver>();
            approversListField.setEmptyText("employee last name");
            approversListField.setTemplate(getApproverTemplate());
            approversListField.setFieldLabel("Approvers *");
            approversListField.setId("approvers");
            approversListField.setEmptyText("No approvers available.");

                return approversListField;

        }

        private void loadApprovers(int locationID) {

                ListStore<Approver> approversStore = dataStores.getApprovers(locationID);           
                approversListField.setStore(approversStore);
                approversListField.setValueField("userID");
                approversStore.addStoreListener(new StoreListener<Approver>() {
                    @Override
                    public void storeDataChanged(StoreEvent<Approver> se) {
                        super.storeDataChanged(se);

                        approversListField.fireEvent(Events.Render);

                    }
                });

                /**
                 * // * Attach render listener, had to do it on render because select()
                 * // * method only works onrender // *
                 * http://www.sencha.com/forum/showthread.php?55659-Selecting-Items-in-ListField-After-Load // *
                 */
                approversListField.addListener(Events.Render, new Listener<BaseEvent>() {
                    @Override
                    public void handleEvent(BaseEvent be) {

                        ListViewSelectionModel<Approver> approverListFieldSelectionModel = approversListField.getListView()
                                .getSelectionModel();


                        approversListField.getListView().refresh();
                        approverListFieldSelectionModel.deselectAll();                                      

                        System.out.println("approversStore size:"+approversListField.getStore().getCount());
                        for (int i = 0; i < approversListField.getStore().getCount(); i++) {
                            Approver app = approversListField.getStore().getAt(i);

                            System.out.println(app);                    
                            if (app.isSelected() == true) {

                                System.out.println("FOUND THE APPROVER!  " + i);
                                approverListFieldSelectionModel.select(app, true);                                                                              

                            }
                        }

                    }
                });

        }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-14 18:12:54

终于自己找到了。把它留在这里做它的价值。

看起来,如果存储发生变化,您也必须为Listfield的View的存储重新设置存储。

代码语言:javascript
复制
approversListField.getListView().setStore(approversListField.getStore());

无需触发Render.Can,只需对存储数据进行修改即可。

代码语言:javascript
复制
approversStore.addStoreListener(new StoreListener<Approver>() {
            @Override
            public void storeDataChanged(StoreEvent<Approver> se) {
                super.storeDataChanged(se);

                ListViewSelectionModel<Approver> approverListFieldSelectionModel = approversListField.getListView()
                        .getSelectionModel();
                approverListFieldSelectionModel.deselectAll();
                approversListField.getListView().setStore(approversListField.getStore());
                approversListField.getListView().refresh();
                for (int i = 0; i < approversListField.getStore().getCount(); i++) {                    
                    Approver app = approversListField.getStore().getAt(i);
                    if (app.getIsselected() == true) {                  
                        approverListFieldSelectionModel.select(i, true);

                    }
                }

            }
        });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18132408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档