2011-11-23 4 views
0

DynamicFormTextField이 입력되어 있습니다. 그들은 사용자 정의 컨트롤러의보기 (양식과 같은)에 있습니다. 사용자가이 필드에 텍스트를 입력하면 사용 가능한 (적절한) 텍스트 값이있는 ListGrid이 표시됩니다. ListGridDataSource fetching을 통해 서버에서 데이터를 검색합니다. dataArrived event에는 논리가 있고 다른 서버 요청을 보내거나 보내지 않기로 결정하고 TextField에 중점을 둡니다.SmartGWT TextField가 캐럿 위치를 변경합니다.

form.focusInItem(item); 

이상한 동작은 IE에서 발생합니다. 데이터가 도착하면 커서가 TextField의 맨 앞에 놓입니다. 데이터가 도착한 후 Mozilla에서 Chrome이 (포커스가 설정된 후에도) 포커스를 잃을 수 있습니다. 그리고 초점은 어딘가에 (어딘가에 textField와 advice 그리드 사이에) 위치한다. 내 컨트롤러보기에서 다음 컨트롤로 Tab 한 다음 Shift + Tab을 사용하여 TextField으로 돌아갈 수 있습니다.

왜 그런지는 모릅니다. 디버깅하는 동안 이상한 것을 볼 수 없습니다. 누군가 SmartGWT 텍스트 컨트롤로 이와 같은 문제에 직면했을 수 있습니까?

답변

0

이 이상한 동작에 대한 이유가 발견되었습니다.

// If the item doesn't have focus always return null 
    // Natively the method we use in Moz would give us back the last selection, but the 
    // method we use in IE can't give us anything meaningful. 

//> @method formItem.getSelectionRange() 
// For text-based items, this method returns the indices of the start/end of the current 
// selection. Returns null if the item doesn't have focus. 
// <P> 
// Notes: 
// <UL> 
// <LI>In Internet Explorer, if the item has lost focus since the selection was made, 
// only the start (current caret position) is returned. This is a limitation of Internet 
// Explorer.</LI> 
는 서버가 우리에게 데이터 (dataArrived 이벤트)의 일부를 반환 한 후, 데이터가 ListGridTextField 손실 초점을 가져,

그래서 FormItem.js에서에서 촬영 . 우리가 수동으로 텍스트 필드 (form.focusInItem(item);)로 포커스를 되돌릴 때 선택은 (0,0) - 필드의 시작 부분입니다. 그러나 IE에서만. 따라서 데이터를 가져 오기 전에 마지막 선택 영역을 저장 한 다음 포커스를 수동으로 텍스트 필드에 다시 입력 한 후에이 선택 영역을 적용해야합니다. 그리고 모든 데이터 작업 후 선택 초점을 넣고 설정하기 전에 우리 해야 당신이 말하는,이 IE의 기본 제한 사항입니다 볼 수있는 댓글 form.redraw();

1

을한다. 그러나 fetchData()의 dsRequest 속성 인수를 통해 rpcRequest.showPrompt : false를 전달하면 필드를 벗어나는 포커스를 피할 수 있습니다.

또한 가져 오기가 완료된 후에도 텍스트 필드에 포커스가 복원되어야하며이 경우를 나타내는 자동 테스트가 있습니다. 이것이 발생하지 않는 경우를 찾았 으면 테스트 케이스를 제출해주십시오. 그렇다면 GWT 및 SmartGWT 버전 및 관련된 제 3 자 라이브러리에 대해 언급하십시오.

관련 문제