Spark TextInput неполное значение с помощью Barcode Reader - PullRequest
1 голос
/ 21 июля 2010

при работе с приложением Flex4 AIR, используя этот компонент, я получаю данные из считывателя штрих-кода,

<s:TextInput id="barcode" enter="showBarcode()"/>

Затем для обработки события ввода, которое автоматически запускается, когда считыватель заканчивает чтение

private function showBarcode():void{
   Alert.show(barcode.text);
}

Хорошо, очень просто. Но моя проблема в том, что текст, отображаемый в окне оповещения, является неполным, в нем пропускаются одна или две цифры (последняя) или просто отображается весь текст в компоненте TextInput (правильное представление)

Я уже тестировал свой считыватель BC с помощью блокнота, и все в порядке.

Я тестировал тот же код с использованием компонентов MX в веб-приложении Flex3, и проблем нет.

Будет признательна за помощь.

Tnx

Ответы [ 4 ]

3 голосов
/ 16 ноября 2012

Мы столкнулись с той же проблемой и закончили тем, что сохранили символы, полученные от сканера штрих-кода, в буфер вместо доступа к текстовому свойству TextInput. Мы всегда получали символы в правильном порядке, но с помощью Spark TextInput свойство text иногда шифровалось.

<s:TextInput id="barcode" keyDown="barcode_keyDownHandler(event)" />

Это буфер, который мы использовали, и это соответствующие функции:

private var textBuffer:ArrayList = new ArrayList();

protected function getTextBufferContent():String
{
    var content:String="";
    for (var i:int = 0; i < textBuffer.length; i++)
    {
        content=content.concat(textBuffer.getItemAt(i));
    }
    return content;
}

protected function handleKeyboardEnter():void
{
    var barcodeScan:String=getTextBufferContent();
    textBuffer.removeAll();
    if (barcodeScan != "")
    {
        Alert.show(barcodeScan);
    }
}

protected function barcode_keyDownHandler(event:KeyboardEvent):void
{
    trace("barcode_keyDownHandler: " + event.keyCode + " " + String.fromCharCode(event.keyCode));               
    if (event.keyCode == Keyboard.ENTER)
    {
        handleKeyboardEnter();
    }
    else textBuffer.addItem(String.fromCharCode(event.keyCode));
}

mx: TextInput также работал, но мы хотели сохранить компонент Spark.

1 голос
/ 21 июля 2010

Вместо использования «enter» попробуйте прослушать событие onKeyUp.

Вам нужно будет определить соответствующий символ конца строки, считываемый со сканера штрих-кода.Но просто введите это и сделайте свое предупреждение таким образом;иначе ничего не делать.

0 голосов
/ 02 марта 2011

Мы столкнулись с тем же, где я работаю, со сканированием штрих-кода в 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)" />
0 голосов
/ 22 июля 2010

Отображается ли текст по крайней мере так, как вы ожидаете в Spark TextInput, используя тот же рабочий процесс со считывателем штрих-кода, как показано в этом видео "Flash Nicey Nice With HID" http://www.youtube.com/watch?v=sEw0RB-Uj00?

В любом случае, я не думаю, что проигрыватель Adobe Flash официально поддерживает другие устройства HID, а не клавиатуру или мышь.

Таким образом, я бы не ожидал, что инженеры Adobe в ближайшее время сделают Spark TextInput совместимым с вашим устройством считывания штрих-кода.

...