Мы столкнулись с тем же, где я работаю, со сканированием штрих-кода в Flex 4 / Spark.Мы нашли два обходных пути.
first должен использовать старый элемент управления TextInput "Halo" (<mx:TextInput />
).Вы можете сделать это даже в проекте Flex 4.
Метод second заключается в том, чтобы сохранить элемент управления TextInput «Spark», но использовать очень короткий таймер в событии 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)" />