【问题标题】:How to get a MultipleSelect ListBox with GWT using UiBinder如何使用 UiBinder 获取带有 GWT 的 MultipleSelect ListBox
【发布时间】:2023-06-16 04:01:01
【问题描述】:

我正在开发一个使用 UiBinder 使用 GWT 开发的应用程序。 在一个视图中,我有一个需要允许多选的 ListBox。

应用程序当前正在使用 setMultipleSelect(boolean isMultipleSelect) 方法在 ListBox 上启用多选。 该方法现已弃用,建议使用构造函数 ListBox(boolean isMultipleSelect)。

问题是我没有构建那个 ListBox,它是在绑定时完成的(我想,我不太确定它是如何工作的)。

我的代码是这样的:

interface ViewUiBinder extends UiBinder<Widget, View> {}

private static ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class);

private Widget widget;
@UiField
ListBox listBox;

@Inject
public View() {
  widget = uiBinder.createAndBindUi(this);
  listBox.setMultipleSelected(true);
}

有谁知道如何使用多选构造函数初始化 ListBox 并使其工作?

谢谢,

马修

【问题讨论】:

    标签: gwt uibinder


    【解决方案1】:

    我会为UiField 使用provided = true 注释参数并初始化该字段。如果不想用字段初始化列表框,而是在View构造函数中,设置uiBinder.createAndBinUi(this);之前的语句

    @UiField(provided = true)
    ListBox listBox = new ListBox(true);
    

    【讨论】:

    • 谢谢,我要试试这个。我会告诉你它是否有效。
    • 我在项目中看不够,它已经在另一个演示者中使用了。
    【解决方案2】:

    您可以使用 UiBinder 模板中的非大写属性名称访问 UI 小部件的任何类似 bean 的属性。它看起来像这样:

    <g:ListBox ui:field="listBox" multipleSelect="true" />
    

    在绝对必要之前,我倾向于避免使用 provided=true 注释参数,但在这种情况下并非如此。

    【讨论】:

    • 但是这样做与调用已弃用的方法 setMultipleSelected 是一样的,不是吗?
    • @clavelm:是的,这与调用 setMultipleSelected 方法相同,因为您想避免它,所以我不建议使用此解决方案 ;-)
    • 阅读理解失败,抱歉。但是,如果您仍然需要出于 IE6 的考虑而编写代码,我表示最诚挚的哀悼。