Gwt GXT ListField在滚动后不允许shift选择
我有一个页面,它使用GXT 2.2.5和GWT 2.4.0生成一个表单,其中包括一个多选列表。当用户选择一个项目时,按住shift键并单击另一个项目,而不滚动该项目将按预期工作。但是,当他们选择一个项目时,滚动使所选项目不再可见,然后按住shift键并单击另一个项目,则不会选择任何项目。看起来整个列表都被选中,然后被取消选中 我能够用下面的简化代码在Chrome36和IE9中重现这一点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
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,这样我们就可以正式跟踪了,但我今天会很快研究这个问题,否则就回到这里。