如何解决在应用程序中加载单选按钮的延迟?

时间:2017-04-13 15:52:06

标签: java gwt

在我的应用程序中,我选择了一个单选按钮字段。当我打开页面时,所选字段有一些延迟。示例:我打开页面,单选按钮处于未选中状态,经过一段时间(比如像在屏幕上滚动/滚动),单选按钮变为选中状态。有没有其他方法可以解决这种延迟?

 var memoryStore = new Memory({
            data: [{
               id: "root",
               name: "ROOT",
               loaded: true
            }, ],
            getChildren: function(object) {
               return this.query({
                  parent: object.id
               });
            },
            clearOnClose:true
         });

var myStore = new Observable(memoryStore);

 var myModel = new TreeStoreModel({
                store: myStore,
                query: {
                   id: "root"
                },
                labelAttr: "label",
                pasteItem: function(child, oldParent, newParent, copy, insertIndex) {
                   // SEND NOTIFICATION, DO QUERIES
                }
             });

var tree = new Tree({
            model: myModel,
            dndController: dndSource
});

在上面的代码中,“item”是小部件字段名称,根据我的“getselected”值,将选择单选图标。这里我的“getSelected”值是真的。

1 个答案:

答案 0 :(得分:0)

scheduleDeferred中的任何代码都将推迟执行,直到浏览器完成呈现页面并且流控制返回到Javascript事件循环,如GWT's documentation中所述:

  

将一些逻辑推迟到近期:调度程序类
  有时您想要分解逻辑循环,以便JavaScript事件循环有机会在两段代码之间运行。 Scheduler课程允许您这样做。在将控制权返回到JavaScript事件循环之后,传递给Scheduler的逻辑将在将来的某个时刻运行。这种小延迟可能使接口有机会处理某些用户事件或初始化其他代码。要以最简单的形式使用Scheduler类,您需要创建Command类的子类,覆盖execute()方法并将其传递给Scheduler.scheduleDeferred

如果你想要的是立即选择单选按钮,只需删除Scheduler包装,即从statementGroupSelectionModel.setSelected(item, profile.getSelected());移出scheduleDeferred

// Put this here
statementGroupSelectionModel.setSelected(item, profile.getSelected());

// Remove the following code
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
        ...
        });

如果您想要的不是那个(抱歉,您的解释还不清楚),但只是为了能够自己设置延迟时间而不必等待浏览器,您可以使用Timer类这在上面链接的文档中有解释。