SmartGWT TextField меняет положение каретки - PullRequest
0 голосов
/ 23 ноября 2011

У меня есть DynamicForm с TextField. Они находятся в пользовательском контроллере (например, в форме). Когда пользователь вводит какой-либо текст в это поле, отображается ListGrid с доступными (подходящими) текстовыми значениями. ListGrid получает данные с сервера через DataSource fetching. В dataArrived event у меня есть некоторая логика, и я принимаю решение отправлять другой запрос на сервер или нет, и фокусируюсь на TextField.

form.focusInItem(item);

Странное поведение происходит в IE. После получения данных курсор помещается в самое начало TextField. В Mozilla, Chrome после поступления данных текстовое поле может потерять фокус (даже после фокусировки). И фокус находится где-то еще (где-то между textField и советом сетки). Я могу перейти к следующему элементу управления в представлении моего контроллера, а затем Shift + Tab вернуться к TextField.

Понятия не имею, почему это происходит. Не вижу ничего странного во время отладки. Может быть, кто-то сталкивался с подобной проблемой с текстовыми элементами управления SmartGWT?

Ответы [ 2 ]

1 голос
/ 30 ноября 2011

Как показывают найденные вами комментарии, это родное ограничение IE. Однако вы можете избежать фокуса, покидая поле вообще, если передаете rpcRequest.showPrompt: false через аргумент свойств dsRequest fetchData ().

Кроме того, фокус должен был быть восстановлен в текстовом поле после завершения выборки, и у нас есть автоматические тесты, показывающие, что это так. Если вы обнаружили случай, когда этого не происходит, пожалуйста, не стесняйтесь представить тестовый пример, но если это так, обязательно укажите вашу версию GWT и SmartGWT и все сторонние задействованные библиотеки.

0 голосов
/ 24 ноября 2011

Причины такого странного поведения были найдены.

//> @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>
// 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.

Взято из FormItem.js

Итак, после того, как сервер вернул нам часть данных (событие dataArrived), данные, извлеченные в ListGrid и TextField, потеряли фокус. Когда мы вручную помещаем фокус обратно в текстовое поле (form.focusInItem(item);), выбор будет (0,0) - начало поля. Но только в IE. Таким образом, мы должны сохранить последний выбор перед извлечением данных, а затем применить этот выбор после того, как фокус был вручную возвращен в текстовое поле. И после всех операций с данными и перед тем, как поставить фокус и выбрать настройки, мы должны сделать form.redraw();

...