如何防止在 SelectionChangehander 触发后重绘 CellTable RowElement?
How do I prevent a CellTable RowElement from being redrawn after a SelectionChangehander fires?
我可能做错了什么,但我遵循了此处给出的示例:
How to remove a row from the Cell Table
和
GWT get CellTable contents for printing or export
完成我的目标,结果接近但不太正确。
我有一个包含两个小部件的页面。第一个 wiget 包含一个 CellTable,它使用一个 Sync ListDataProvider 来提取结果并填充一个 table。 table 有一个与之关联的 selection 更改事件处理程序,可将有关 selected 项目的更多详细信息加载到其下方的第二个小部件中。
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);
}
一旦第二个小部件加载了有关 selected 项目的详细信息,用户可以通过单击作为两个小部件的父级的 RootPanel 中的按钮从 table/list 中删除该项目.
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");
}
}
}
}
});
这一切正常,直到您 select table 中的另一个项目。发生这种情况时,selection 更改事件似乎会重绘 table 并从之前 selected 项目中删除我的自定义属性和 class。这使它再次出现在列表中。
此处的最终目标是避免在从列表中删除项目时往返服务器以提取新结果。 "searchView.getOrderAdminSnapshot().reviewOrder();" 行进行 Web 服务调用,从服务器端的数据中删除该项目,因此它不会出现在后续重新加载中。
有什么方法可以强制 select 离子变化事件保持 table 行之前 select 的状态?有没有更好的方法从列表中删除 selected 项目?如有任何建议,我们将不胜感激。
从列表 dataProvider.getList().remove
中删除对象后,它应该会从 table 中消失。无需隐藏该行 - 该行应该消失了。所以你的循环应该永远找不到它。
我可能做错了什么,但我遵循了此处给出的示例:
How to remove a row from the Cell Table 和 GWT get CellTable contents for printing or export
完成我的目标,结果接近但不太正确。
我有一个包含两个小部件的页面。第一个 wiget 包含一个 CellTable,它使用一个 Sync ListDataProvider 来提取结果并填充一个 table。 table 有一个与之关联的 selection 更改事件处理程序,可将有关 selected 项目的更多详细信息加载到其下方的第二个小部件中。
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);
}
一旦第二个小部件加载了有关 selected 项目的详细信息,用户可以通过单击作为两个小部件的父级的 RootPanel 中的按钮从 table/list 中删除该项目.
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");
}
}
}
}
});
这一切正常,直到您 select table 中的另一个项目。发生这种情况时,selection 更改事件似乎会重绘 table 并从之前 selected 项目中删除我的自定义属性和 class。这使它再次出现在列表中。
此处的最终目标是避免在从列表中删除项目时往返服务器以提取新结果。 "searchView.getOrderAdminSnapshot().reviewOrder();" 行进行 Web 服务调用,从服务器端的数据中删除该项目,因此它不会出现在后续重新加载中。
有什么方法可以强制 select 离子变化事件保持 table 行之前 select 的状态?有没有更好的方法从列表中删除 selected 项目?如有任何建议,我们将不胜感激。
从列表 dataProvider.getList().remove
中删除对象后,它应该会从 table 中消失。无需隐藏该行 - 该行应该消失了。所以你的循环应该永远找不到它。