1

在 Google Web Toolkit (GWT) 中工作 我正在使用 CellList 来呈现关税列表的详细信息(使用 CompositeCell 在我自己的自定义单元格旁边显示 CheckBoxCell)。

我想按关税长度(12、18、24、36 个月等)过滤列表。我想在列表顶部为每个关税长度呈现一个复选框,并在用户取消选中并重新选中一个框时根据需要更新 dataProvider。

我事先不知道关税长度的集合,它们将在页面呈现时从结果集中提取。可能只有两个(需要两个复选框),但可能有 10 个(需要 10 个复选框) - 我只想根据需要为每个复选框呈现一个复选框。

所以不知何故,我需要将一个 int 值与每个复选框相关联,然后将该 int 传递给一个函数,该函数通过删除所有匹配的关税来更新列表。我只是不确定如何为复选框添加处理程序以及如何获取该特定框的值。

这就是我的想法:

    // panel to hold boxes
    private Panel contractLengthPanel = new HorizontalPanel();      
    textPanel2.add(contractLengthPanel);

    // create a set of the terms, by looping the result set
    Set<String> contractTerms = new HashSet<String>();
    for(ElecTariff tariff : tariffs)
    {
        contractTerms.add(Integer.toString(tariff.getContractLength()));
    }

    // loop that set, creating a CheckBox for each value
    for(String term : contractTerms)
    {
        CheckBox box = new CheckBox(term + " Months");

        // set all boxes with the same name, and a unique id
        box.getElement().setAttribute("name", "termBoxes");
        box.getElement().setAttribute("id", "termBox" + term);

        contractLengthPanel.add(box);
    }

现在我不确定我在这里是否正确,但现在我将每个框作为同一组的一部分(它们具有相同的名称)我想用它来添加一个处理程序,当一个box 被选中或未选中,将 box id(包含关税长度)传递给该函数。

我希望这不是写得太混乱。帮助表示赞赏。

4

1 回答 1

4

在 HTML 中确实没有像“一组复选框”这样的东西,在 GWT 中也没有。虽然有一种“单选按钮组”,但它只是让它们的选中状态互斥,它不会改变你从代码中使用它们的方式。

您必须听取每个复选框的更改。

您可以做的是为所有复选框使用相同的事件处理程序;就像是:

ValueChangeHandler<Boolean> handler = new ValueChangeHandler<Boolean>() {
   @Override
   public void onValueChange(ValueChangeEvent<Boolean> event) {
      CheckBox box = (CheckBox) event.getSource();
      String id = box.getFormValue();
      boolean checked = box.getValue();
      …
   }
};

(注意:我使用getFormValue()而不是getElement().getId();我相信这是一个更好的选择:它专门用于将值与复选框相关联)

于 2013-01-30T16:36:51.900 回答