为什么@UiFactory ListBox makeListBox1()方法会影响所有UiBinder ListBoxes(ListBox1,ListBox2,ListBox3等)?

时间:2014-02-22 11:22:37

标签: gwt uibinder gwtp

好的,我需要在UiBinder中使用很多ListBox。

好的,在View.ui.xml文件中:

<g:ListBox ui:field='listBox1' visibleItemCount='3' >
    <g:item value='1'> Car </g:item>
    <g:item value='2'> Car2 </g:item>
    <g:item value='3'> Car3 </g:item>
    //more item
</g:ListBox>

<g:ListBox ui:field='listBox2' visibleItemCount='3' >
    <g:item value='1'> Bike </g:item>
    <g:item value='2'> Bike2 </g:item>
    <g:item value='3'> Bike3 </g:item>
    //more item
</g:ListBox>

// more ui binder ListBox here

现在我只想setMultipleSelect使用某些ListBox,因此我可以执行类似<g:ListBox ui:field='listBox2' visibleItemCount='3' multipleSelect="true" >之类的操作,它可以正常运行但setMultipleSelect(boolean multiple)已被弃用,Google表示:

  

@Deprecated public void setMultipleSelect(boolean multiple)

     

已过时。使用ListBox(布尔值)来设置此列表是否允许   多项选择。注意:启用多个的首选方法   列表框中的选择是使用ListBox(布尔)构造函数。   在Internet Explorer 6.0上使用此方法可能会导致虚假失败。

所以这意味着我们不使用setMultipleSelect但使用构造函数ListBox(boolean)来设置MultipleSelection,所以这是我在View.java中所做的

@UiField ListBox listBox1;
@UiField ListBox listBox2;
@UiFactory ListBox makeListBox1(){
    listBox1=new ListBox(true);
    return listBox1;
}

但是,上面的代码对所有ListBox(listBox1,listBox2等)应用ListBox(true)。我不希望所有ListBox都有MultipleSelection cos,其他一些ListBox需要single selection only

为什么@UiFactory ListBox makeListBox1()方法会影响所有ListBoxes&amp;怎么解决?

不确定provided=true可以提供帮助吗?

2 个答案:

答案 0 :(得分:3)

尝试provided=true

@UiField(provided = true) ListBox listBox1;

public MyClass() {
      listBox1=new ListBox(true);
      initWidget(uiBinder.createAndBindUi(this));
}

它必须解决你的问题

答案 1 :(得分:1)

不考虑方法的名称,只考虑返回类型,因此它用于当前模板中具有该类型的所有小部件。如果你想要某些字段的特定实例,那么正如Maksym所说,只需使用provided=true,或者你可以将参数传递给@UiFactory方法,这样它就可以调整它的行为(但这意味着你必须把它放到你的ui.xml中所有列表框的参数然后)。

但是请注意,setMultipleSelect已在GWT 2.6中被弃用,现在IE6支持正在落日。