我在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