Gwt GXT ListField在滚动后不允许shift选择

Gwt GXT ListField在滚动后不允许shift选择,gwt,gxt,multi-select,Gwt,Gxt,Multi Select,我有一个页面,它使用GXT 2.2.5和GWT 2.4.0生成一个表单,其中包括一个多选列表。当用户选择一个项目时,按住shift键并单击另一个项目,而不滚动该项目将按预期工作。但是,当他们选择一个项目时,滚动使所选项目不再可见,然后按住shift键并单击另一个项目,则不会选择任何项目。看起来整个列表都被选中,然后被取消选中 我能够用下面的简化代码在Chrome36和IE9中重现这一点 public class SimpleMultiSelectView implements WidgetFac

我有一个页面,它使用GXT 2.2.5和GWT 2.4.0生成一个表单,其中包括一个多选列表。当用户选择一个项目时,按住shift键并单击另一个项目,而不滚动该项目将按预期工作。但是,当他们选择一个项目时,滚动使所选项目不再可见,然后按住shift键并单击另一个项目,则不会选择任何项目。看起来整个列表都被选中,然后被取消选中

我能够用下面的简化代码在Chrome36和IE9中重现这一点

public class SimpleMultiSelectView implements WidgetFactory {

    public Widget buildWidget(String userName, Entry entry) {

        final Viewport viewport = new Viewport();
        final FormData formData = new FormData("-10");

        ListStore<ModelData> store = new ListStore();
        for (int i = 1; i< 50; i++) {
            ModelData modelData = new BaseModel();
            modelData.set("id", i);
            modelData.set("display", "Test " + i);
            store.add(modelData);
        }

        ListField<ModelData> selectionBox = new ListField<ModelData>();
        selectionBox.setStore(store);
        selectionBox.setDisplayField("display");
        selectionBox.setFieldLabel("display");
        selectionBox.setWidth(300);
        selectionBox.setHeight(300);

        LayoutContainer workFlowSearch = new LayoutContainer();    
        workFlowSearch.add(selectionBox, formData);

        viewport.add(workFlowSearch);

        return viewport;
    }
}
要重现问题,请执行以下操作:

选择列表中的任何项目 滚动以使所选项目不再可见 按住SHIFT键并选择任何项目 请确保未选择任何内容 以前有人见过这个吗?我能做些什么来改变这种行为

笔记 我确实尝试过将项目更新为GXT 3.1.0和GWT 2.6.1,但似乎没有什么不同

我也把这个HTML放在一起,以检查我自己的理智

<html>
    <body>    
        <form action="">
            <select name="selection" multiple style="height: 200px; width: 125px">
                <option value="Option 1">Option 1</option>
                <option value="Option 2">Option 2</option>
                <option value="Option 3">Option 3</option>
                <option value="Option 4">Option 4</option>
                <option value="Option 5">Option 5</option>
                <option value="Option 6">Option 6</option>
                <option value="Option 7">Option 7</option>
                <option value="Option 8">Option 8</option>
                <option value="Option 9">Option 9</option>
                <option value="Option 10">Option 10</option>
                <option value="Option 11">Option 11</option>
                <option value="Option 12">Option 12</option>
                <option value="Option 13">Option 13</option>
                <option value="Option 14">Option 14</option>
                <option value="Option 15">Option 15</option>
                <option value="Option 16">Option 16</option>
                <option value="Option 17">Option 17</option>
                <option value="Option 18">Option 18</option>
                <option value="Option 19">Option 19</option>
            </select>
            <input type="submit">
        </form>    
    </body>
</html>
如果按照上面的复制步骤进行操作,您将看到两个选择之间的所有内容都已按预期选中

感谢GXT 3中的ListField类,因为您也使用了3进行了测试,而且我还没有打开2.x项目。。。是为单个选择而设计的-类声明将其标记为某些T上的泛型,因此它可分配给HasValue并包装呈现T项的ListView。仅此一点,我就预测并确认ListView是为单选连接的:

public ListField(ListView<M, T> view) {
  super(view);
  this.listView = view;
  this.listView.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
当然,您可以修改此设置,但它不会更改泛型以使getValue 突然返回列表而不仅仅是T

这意味着发生的不是选择被破坏,而是您试图在为单选设置的列表中进行多选

如果你实际上不需要一个Listfield,但是想要得到多选择的数据,考虑一下创建一个ListVIEW。这在GXT 2或3中或多或少应该是相同的-创建ListView,就像您目前正在做的一样,这次将选择模型设置为多个或简单,查看JavaDoc以确定哪个是适用的

要验证这在GXT 2/3中是否都有效,请执行以下操作:

有多个ListView,配置为使用multi-select,我通过单击中间项目进行验证,滚动到接近末尾,按住shift键并单击当前可见的中间项目,验证所有预期项目现在都已选中

是GXT 3中上述的等效项,似乎按照相同的基本步骤工作


谢谢,不幸的是,这并没有解决问题。有趣的是,当我在IE和Chrome中尝试Sencha演示时,它们也遇到了同样的问题。我调出Firefox31,演示在那里正常运行。您使用了什么浏览器?已确认,非ff中存在错误。从事物的外观选择,滚动,取消选择,我们可能会从浏览器获得另一个事件,或者焦点IMPL元素修复一些浏览器中的TabCurdiy是不礼貌的。有趣的是,我会尝试跟踪ShanCha并在这里记录,如果他们有一个很好的解决办法。嗯,我是GXT在SeCHA上的领先者,所以请考虑自己跟进:最好的选择是在论坛上提交一个bug,这样我们就可以正式跟踪了,但我今天会很快研究这个问题,否则就回到这里。