我在Flex 4/Spark的条码扫描工作中遇到了同样的问题。我们找到了两种解决方法。
第一个是使用旧的“Halo”TextInput控件(<mx:TextInput />
)。即使在Flex 4项目中也可以做到这一点。
的第二方法,是保持“星火”的TextInput控制,而是利用很短的计时器在你使用keyUp或keyDown事件让文本属性完全充满条形码扫描数据 - 这不是我我不确切知道这是为什么起作用,但确实如此。而且你可以保留Spark控件/蒙皮的所有优点。所以,楼主的例子可能是固定的,如果它变成了:
<s:TextInput id="barcode" keyDown="showBarcode(event)"/>
和
private function showBarcode(evt:KeyboardEvent):void {
var t:Timer = new Timer(10, 1); // 10ms
t.addEventListener(TimerEvent.TIMER, function():void {
Alert.show(barcode.text);
});
t.start();
}
奖励:
如果你不想使用此定时器遍布在事件处理程序代码,你可以把它一个效用函数在Barcoder.as
类,像这样:
public static function checkScan(evt:KeyboardEvent, callback:Function):void
{
if (evt.keyCode == Keyboard.ENTER)
{
var t:Timer = new Timer(10, 1); // 10 ms
t.addEventListener(TimerEvent.TIMER, function():void { callback(); });
t.start();
}
}
然后,如果你有两个独立的条码领域,具有两个独立的处理器(bc1_handler()
和bc2_handler()
)你的MXML会是这样的:
<s:TextInput id="barcode1" keyDown="Barcoder.checkScan(event, bc1_handler)" />
<s:TextInput id="barcode2" keyDown="Barcoder.checkScan(event, bc2_handler)" />
我尝试使用keyUp =“showBarcode(event)”的建议。结果是一样的。 我相信这可能是一个与输入缓冲区有关的错误,我不知道。 Tnx – gustyaquino 2010-07-21 15:38:02
有趣。很容易相信输入缓冲区是一个因素。您是否尝试过Flex 4 SDK中的mx:TextInput? – JeffryHouser 2010-07-21 16:14:59
你实际上想要做keyDown,而不是keyUp(想想按住textInput中的一个键)。我们在许多机器上使用条形码扫描仪(监听条形码上的第一个字符ctrl-y,触发条形码管理器中的某些动作,成为显示列表的一部分......所有动作都完美无缺)。 – 2010-07-21 16:18:16