onChange()에서 다른 listBox를 업데이트하는 목록 상자가 있습니다. 그래서 코드는이 하나의 결함을 제외한 모든 잘 작동한다listBox의 onChange 이벤트 처리기에서 많은 처리로 인해 GWT UI가 업데이트되지 않습니다.
ListBox l1 = new ListBox();
...some items added to l1..
ListBox l2 = new ListBox();
l2.setEnabled(false);
l1.addChangeHandler(new ChangeHandler() {
@Override
public void onChange(ChangeEvent event) {
//Show info msg
//Update label text on top of the page with "Loading.."
//..Do some processing here..
L2.setEnabled(true);
L2.getElement().setInnerHTML(html);
}
같은 것입니다. UI가 멈추고 l1, l2 및 label은 처리가 완료 될 때까지 변경 사항을 반영하지 않습니다. l2는 나중 시점에 반영되지만, l1과 정보도 나타나지 않습니다.
나는대로 scheduledDeferred를 사용하여 시도 -l1.addChangeHandler(new ChangeHandler() {
@Override
public void onChange(ChangeEvent event) {
//Show info msg
//Update label text on top of the page with "Loading.."
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
@Overide
public void execute() {
//..Do some processing here..
}
}
L2.setEnabled(true);
L2.getElement().setInnerHTML(html);
}
}
그러나 위의 여전히 도움이되지 않으며, 여전히 평소처럼 일하고있다. 어떤 제안?
죄송합니다. 나는 복사 - 붙여 넣기하는 동안 그것을 잘못 썼다. 나는 당신이 말하는 것을 수행하고 있습니다. 즉, scheduleDeferred에서 처리하고 있습니다. 그리고이 외부에서는 UI를 업데이트했습니다. 어떤 것도 작동하지 않습니다. BTW, 내 처리 과정에서 기어 데이터베이스를 쿼리하고 있습니다. 쿼리는 SQLite에 약간 무겁기 때문에 시간이 걸립니다. 귀하의 회신에 감사 드리며 원래 질문을 수정하겠습니다. – Rahul
그렇다면 UI 업데이트가 실행되는지 (즉, 값 비싼 sqlite 호출로 인해 브라우저가 지연하는지) 확인할 수 있습니다. - Scheduler.get() 호출 사이에 GWT.log()를 삽입하십시오. .. 그리고 L2.setEnabled() ... – Chii
나는 쿼리를 빠르게 (SQLite에 인덱스를 추가 한)이 다른 방법으로 해결 했으므로 신속하게 반환됩니다. – Rahul