【问题标题】:How do I prevent a CellTable RowElement from being redrawn after a SelectionChangehander fires?如何防止在 SelectionChangehander 触发后重绘 CellTable RowElement?
【发布时间】:2015-11-06 21:54:36
【问题描述】:

我可能做错了什么,但我遵循了这里给出的例子:

How to remove a row from the Cell TableGWT get CellTable contents for printing or export

完成我的目标,结果很接近但不太正确。

我有一个带有两个小部件的页面。第一个 wiget 包含一个 CellTable,它使用 aSync ListDataProvider 来提取结果并填充表格。该表有一个与之关联的选择更改事件处理程序,它将有关所选项目的更多详细信息加载到其下方的第二个小部件中。

public OrderAdminTable() {
    selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
    @Override
    public void onSelectionChange(SelectionChangeEvent event) {
      OrderAdminListProxy selected = selectionModel.getSelectedObject();
          if (selected != null && orderSnapShot != null) {
                orderSnapShot.loadSnapShot(selected);
          }
       }
    });

    initTable();
    this.addStyleName("order-list fixed_headers BOM");
    this.setSelectionModel(selectionModel);
}

一旦第二个小部件加载了有关所选项目的详细信息,用户可以通过单击作为两个小部件父级的 RootPanel 中的按钮从表/列表中删除该项目。

searchView.getCmdReview().addClickHandler(new ClickHandler() {
        @Override public void onClick(ClickEvent event) {
            searchView.getOrderAdminSnapshot().reviewOrder();//this line calls a web service that deletes the item from the server data
            dataProvider.getList().remove(searchView.getOrderAdminSnapshot().getSelectedOrder());
            for(int i=0;i<table.getRowCount();i++){
                TableRowElement row = table.getRowElement(i);
                for(int j=0;j<row.getCells().getLength();j++){
                    if(row.getCells().getItem(j).getInnerText().contains(searchView.getOrderAdminSnapshot().getSelectedOrder().getSalesOrderNumber())){
                        row.setAttribute("removed", "true");
                        row.addClassName("hidden");
                    }
                }
            }
        }
    });

这一切正常,直到您在表格中选择另一个项目。发生这种情况时,选择更改事件似乎会重新绘制表格并从先前选择的项目中删除我的自定义属性和类。这使它再次出现在列表中。

这里的最终目标是当您从列表中删除项目时,避免往返服务器以获取新结果。行“searchView.getOrderAdminSnapshot().reviewOrder();”进行 Web 服务调用,从服务器端的数据中删除该项目,使其不会出现在后续重新加载中。

有没有办法强制选择更改事件保持之前选择的表格行的状态?有没有更好的方法从列表中删除所选项目?任何建议将不胜感激。

【问题讨论】:

    标签: gwt celltable


    【解决方案1】:

    dataProvider.getList().remove 列表中删除对象后,它应该会从表中消失。无需隐藏该行 - 该行应该消失。所以你的循环不应该找到它。

    【讨论】:

    • 真的吗?我一定没有正确获得我的清单。我的 dataprovider 是一个名为 OrderAdminListDataProvider 的自定义 ListDataProvider,它扩展了 AsyncDataProvider。我必须在我的扩展类中实现 getList() 所以我必须在那里做错了什么。感谢您的洞察力!
    猜你喜欢
    • 1970-01-01
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-03
    • 1970-01-01
    相关资源
    最近更新 更多