GWT - 意外触发CellList的SelectionChangeEvent

时间:2013-12-23 12:00:09

标签: events gwt celllist

我有两个按钮“Next element”和“Previous element”以及一些包含CellList的自定义小部件。 在按钮单击时,我调用我的widget的方法,通过调用它的SelectionModel来改变CellList中的选择:

selectionModel.setSelected(value, true);

当我刷新CellList的内容时,按钮工作正常,但是当我通过单击选择列表中的元素时,会发生以下行为: 例如,我在列表中有元素{0,1,2,3,4,..}。我点击元素1,然后按“下一个元素”按钮两次。这些SelectionChangeEvent发生:

  1. 从1更改选择 - > 2(按下第一个按钮)
  2. 2 - > 3(第二次按下)
  3. 3 - > 1
  4. 但是在第2步之后,如果按“上一步”,它会正确返回到元素1.因此,我用鼠标点击的元素不会让选择围绕它进行超过1步。
    我不知道第三个事件的来源。我的唯一猜测是手动选择事件在触发后继续挂起,但我不知道如何检查。 谁知道这个问题的原因?

    UPD:
    我发现确认点击事件的选择继续挂在EventBus的某处:当我更改搜索过滤器时,我访问SelectionModel的方式与按钮点击相同,并将选择设置为第一个元素。但是如果在此之前有用户点击CellList,则会发生同样的事情:首先,选择更改为0,其次,如果新选择的数据包含该元素,则返回到先前选择的位置。

    upd(对于Ümit的问题):

    nextButton.addClickHandler(new ClickHandler() {
      @Override
      public void onClick(ClickEvent event) {
          /* Omitting checks that there are elements on the list,
             some element is selected and isn't last */
          T value = dataProvider.getList().get(currentIndex() + 1);
          singleSelectionModel.setSelected(value, true);
          singleSelectionModel.isSelected(value);
          Element rowElement = cellList.getRowElement(index);
          rowElement.scrollIntoView();
      }
    }
    

    upd:找到导致此问题的原因: http://code.google.com/p/google-web-toolkit/issues/detail?id=6310

1 个答案:

答案 0 :(得分:0)

您似乎需要使用HandlerRegistration。因此不会调用多次单击事件。

参考:

GWT Handler Registratin

related link