Java SmartGWT文本字段更改插入符号位置

Java SmartGWT文本字段更改插入符号位置,java,gwt,textfield,smartgwt,Java,Gwt,Textfield,Smartgwt,我有一个DynamicForm,其中有一个TextField。它们位于自定义控制器的视图中(类似于表单)。 当用户在此字段中键入某些文本时,将显示带有可用(合适)文本值的ListGrid。 此ListGrid通过DataSource获取从服务器检索数据。在dataArrived事件中我有一些逻辑,决定是否发送另一个服务器请求,并将焦点放在TextField中 form.focusInItem(item); IE中会出现奇怪的行为。数据到达后,光标会放在文本字段的最开头。 在Mozilla中,C

我有一个
DynamicForm
,其中有一个
TextField
。它们位于自定义控制器的视图中(类似于表单)。 当用户在此字段中键入某些文本时,将显示带有可用(合适)文本值的
ListGrid
。 此
ListGrid
通过
DataSource获取从服务器检索数据。在
dataArrived事件中
我有一些逻辑,决定是否发送另一个服务器请求,并将焦点放在
TextField

form.focusInItem(item);
IE中会出现奇怪的行为。数据到达后,光标会放在文本字段的最开头。 在Mozilla中,Chrome在数据到达后,textfield可能会失去焦点(即使在被聚焦后)。焦点放在其他地方(文本字段和建议网格之间)。我可以在控制器的视图中切换到下一个控件,然后按住Shift+Tab键返回到
TextField

form.focusInItem(item);
我不知道为什么会这样。调试时看不到任何奇怪的东西。
可能有人在SmartGWT文本控件中遇到了这样的问题?

找到了这种奇怪行为的原因

取自FormItem.js

所以,在服务器返回一部分数据(dataArrived事件)后,进入
ListGrid
TextField
的数据失去了焦点。当我们手动将焦点放回文本字段(
form.focusInItem(item);
)时,选择是(0,0)-字段的开头。但仅在IE中。因此,我们必须在获取数据之前保存上次选择,然后在手动将焦点放回文本字段后应用此选择。
在所有数据操作之后,在放置焦点和设置选择之前,我们必须执行
form.redraw()

正如您找到的注释所说,这是IE的固有限制。但是,如果您通过rpcRequest,则可以避免焦点离开字段。showPrompt:false通过fetchData()的dsRequest properties参数

另外,焦点应该在提取完成后恢复到文本字段,我们已经进行了自动测试,表明情况就是这样。如果您发现这样的情况没有发生,请随时提交一个测试用例——但如果是这样,请确保您提到您的GWT和SmartGWT版本以及涉及的任何第三方库

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