Gwt 浏览器";“缓冲区”;绘制/回流时的鼠标事件
我正在创建一个GWT应用程序,其中使用Gwt 浏览器";“缓冲区”;绘制/回流时的鼠标事件,gwt,browser,user-input,paint,reflow,Gwt,Browser,User Input,Paint,Reflow,我正在创建一个GWT应用程序,其中使用CellList和ListDataProvider显示元素列表。我希望在每个单元格中显示的数据仅由两个字符串组成。我创建了一个自定义单元格,它从AbstractCell扩展而来。为了创建自定义单元格,我使用UIBinder并基于HTML创建了UI。每个单元格包含两个字符串和一个按钮。单击该按钮将从绑定列表中删除该元素。根据我的分辨率,大约有20个元素是可见的,所以我将页面大小设置为30,以便在用户想要向下滚动时有一点“缓冲区”。以下是前三个元素的外观:
CellList
和ListDataProvider
显示元素列表。我希望在每个单元格中显示的数据仅由两个字符串组成。我创建了一个自定义单元格,它从AbstractCell
扩展而来。为了创建自定义单元格,我使用UIBinder并基于HTML创建了UI。每个单元格包含两个字符串和一个按钮。单击该按钮将从绑定列表中删除该元素。根据我的分辨率,大约有20个元素是可见的,所以我将页面大小设置为30,以便在用户想要向下滚动时有一点“缓冲区”。以下是前三个元素的外观:
在tomcat上运行部署的应用程序时没有问题。但在开发模式下运行时,我在删除元素时注意到以下问题:
- 我点击第一个元素的“删除元素”按钮
- 我再次单击第一个元素的“删除元素”按钮(第一个元素仍然可见)
- 第一个元素将从列表中删除
- 第二个元素也将从列表中删除
onbrowservevent
方法中添加了NativePreviewHandler
并通过Scheduler.get().schedulederferred
调度了ScheduleCommand
,以查看发生了什么。以下是结果(在开发模式下运行,Chrome 27.0.1438.7 dev-m,添加了检查订单的时间戳):
- 在1363340977109鼠标向下(在第一个元素的“移除元素”按钮上)
- 在1363340977206鼠标上(在第一个元素的“移除元素”按钮上)
- 在1363340977225处,单击(第一个元素的“删除元素”按钮)
- at 1363340981341 onBrowserEvent中的scheduleDeferred
- 在1363340981366处,鼠标向下移动(与第一次单击的位置相同,但现在在第二个元素的“移除元素”按钮上,因为第一个元素已移除)
- 在1363340981386鼠标上(在第二个元件的“移除元件”按钮上)
- 在1363340981394处,单击(在第二个元素的“删除元素”按钮上)
- 在1363340985184,onBrowserEvent中延迟了日程安排
ScheduleCommand
后添加了一定的时间(~50ms)。然后我再次启用所有按钮。目前这是可行的,但如果有一天浏览器将输入缓冲超过50毫秒,问题就会再次出现。我来了。默认情况下,此事件不可用,仅适用于Firefox。不幸的是,当我尝试它时,它也冻结了我的FF实例,所以我不打算进一步研究它。