代码之家  ›  专栏  ›  技术社区  ›  gustyaquino

Spark Text使用条形码阅读器输入不完整的值

  •  1
  • gustyaquino  · 技术社区  · 14 年前

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

    然后,对于handle enter事件,当读卡器完成读取时,它会自动触发

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

    好的,很简单。但我的问题是:警告框中显示的文本不完整,缺少一个或两个数字(最后一个),或者只是在TextInput组件中显示整个文本(正确视图)

    我在flex3webapp中使用MX组件测试了相同的代码,没有问题。

    我们会感激你的帮助。

    4 回复  |  直到 14 年前
        1
  •  1
  •   JeffryHouser    14 年前

    您必须找出从条形码扫描仪中读入的适当行尾字符。但是,只要把钥匙插进去,这样做你的警觉;否则什么也不做。

        2
  •  3
  •   mchericoni    12 年前

    我们遇到了同样的问题,最终我们将从条形码扫描仪接收到的字符保存在缓冲区中,而不是访问TextInput text属性。我们总是以正确的顺序接收字符,但是使用Spark TextInput时,文本属性有时会被置乱。

    <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));
    }
    

        3
  •  0
  •   JabbyPanda    14 年前

    http://www.youtube.com/watch?v=sEw0RB-Uj00 ?

    无论如何,我不认为adobeflashplayer正式支持其他HID设备,而不是键盘或鼠标。

        4
  •  0
  •   Adam Nofsinger imBollaveni    13 年前

    我们在我工作的地方遇到了同样的事情,在Flex 4/Spark中进行条形码扫描。我们找到了两个解决办法。

    是使用旧的“光环”文本输入控件( <mx:TextInput /> ). 即使在Flex4项目中也可以这样做。

    第二 方法是保持“Spark”TextInput控件,但在keyUp或keyDown事件中使用一个非常短的计时器,让text属性完全充满条形码扫描数据——我不知道这到底为什么有效,但它确实有效。你可以保留火花控制/蒙皮的所有优点。因此,如果原始海报的示例变成:

    <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)" />