1

私は Web アプリケーションを設計している途中で、データ入力を容易にするためにバーコード読み取りを組み込むことを考えています。宅配業者が行う必要があるタスクのリストがあるとします。次のページのようなものを印刷したいと思います。

+----------------------------------------------------------------------+
| Task List                                   || || |||| || || ||| (a) |
|                                                                      |
| Task One                                    ||| || |||||| || ||| (b) |
| Task Two                                    ||| || || | | || ||| (c) |
| Task Three                                  | |||||| || ||| |||| (d) |
|                                                                      |
|                                             ||||| |||| || || ||| (e) |
+----------------------------------------------------------------------+

||||| | ||| || (x)バーコードは、各行の末尾にある で表されます。バーコード サーブレットをバーベキューとして使用すると、ページを簡単に印刷できます。これらのバーコードをインターセプトし、jQuery で処理する一般的な方法が必要です。例えば:

  • バーコード (a) はgoto:/tasklist/123:
  • バーコード (b)、(c)、および (d) はadd:31222:、 、add:31223、およびadd:31224:
  • バーコード (e) はsubmit::

バーコード(a)をスキャンすると、そのページに移動します。バーコード (b)、(c)、(d) をスキャンするとき、ページにテキスト入力を入力します。バーコード (e) をスキャンすると、フォームが送信されます。バーコードの最初のコマンドに基づいてアクションを登録できるすべてのページで利用できる何らかの形式の jQuery リスナーを用意することを考えています。バーコード デバイスのプログラミングを行ってロジックの一部を組み込むことができることはわかっていますが、それを避けたいので、任意のバーコードでプログラミングを行う必要がありません。

通常の入力とバーコード入力を区別するために、各バーコードは何らかのマジック トークンで開始する必要があるかもしれないと考えたことさえあります。のようなものかもしれません$**$:goto:/tasklist/123:。問題は、この一連のコマンドをインターセプトするために jQuery をどのように実行するか、および作成するさまざまなアクションのハンドラーを登録する正しい方法は何でしょうか (例: $**$:add:31222:)?

4

1 に答える 1

3

私は同様のアプリケーションを実行したので、ここに私の2セントがあります。

USBスキャナーは基本的にUSBキーボードのように機能します。ほとんどの場合、終了文字としてEnterキーが送信されますが、これはほとんどのデバイスで構成できます。UIでアクションを駆動するために、終了文字に依存しました。(Enterは、デフォルトで現在選択されているフォームを送信します。)

もう1つの問題は、これがモバイルアプリケーションの場合、サーバーへのラウンドトリップをできるだけ避けたいということです。UIに大量のアプリケーションロジックを含めることでこれを解決しましたが、すべてのビジネスロジックはまだサーバー上にあるため、アクションを有効にするには、ユーザーがサーバーに接続してPOSTできる必要がありました。

だから、あなたの問題の核心に。次のようなことを考えてみてください。

var state = 'WAITING'; # super simple state

function add(data) {
    # courier checks an item, 'data' contains the data from the scanner
}

function input_handler(input) {
    if (state == 'WAITING') {
        if (input == 'DONE' || input == 'EXIT') {
            state = 'DONE';
            # abort, whatnot
        } else {
            state = 'SCAN';
            input_handler(input); # recurse, with new state
        }
    } else {
        add(input);
    }
}

これは基本的にステートマシンであり、手動でコーディングされています。宅配便業者が「この注文のスキャンを開始します」-バーコードをチェックすると、すべての入力がスキャンハンドラーに送られるモードに入ります。彼が「I'mdone」(バーコード)をスキャンすると、結果などを検証します。これは、実際に実際のステートマシンを使用することで改善できます。

バーコードはできるだけシンプルに保つ必要があります。'SCAN'、'EXIT'、'NOTHING_MORE_TO_SCAN'のようなコマンドは一般的であり、アプリケーションが意味のためにバーコードを解析する必要がないため、適切です。

それらを単純に保つもう1つの理由は、ラベルが破損していてスキャンできない状況に遭遇することです次に、ユーザーは、特殊文字などを見つけるために余分な時間を費やすことなく、手動でデータを入力できる必要があります。

于 2010-11-27T12:27:47.410 に答える