2010-10-20 50 views
1

我正在设计一个Web应用程序的过程中,我正在考虑合并一些条形码读取以方便数据输入。假设我有一份快递员需要完成的任务清单。我想打印类似如下页面的内容:条码网站互动

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

的条形码由||||| | ||| || (x)在每行的末尾表示。打印页面应该直接使用条形码servlet作为烧烤。我想有一个通用的方法来拦截这些条形码,并在jQuery中进行操作。例如:

  • 条形码(一)可以是goto:/tasklist/123:
  • 条码(b)中,(c)和(d)可以是add:31222:add:31223,和add:31224:
  • 条形码(e)中可能是submit::

当扫描条形码(一)我会去那个页面。当扫描条形码(b),(c),(d)时,我会填充页面中的文本输入。当扫描条形码(e)时,我会提交表格。我正在考虑在每个页面上都可以使用某种形式的jQuery侦听器,我可以根据条形码的第一个命令来注册动作。我知道我可以对条形码设备进行编程以合并某些逻辑,但是希望避免出现这种情况,这样任何条形码都可以实现,而且我不必处理编程它们。

我甚至认为每个条形码可能必须以一些魔术标记开始,以区分常规输入和条形码输入。也许像$**$:goto:/tasklist/123:。现在的问题是,我将如何去做jQuery来拦截这组命令,以及为我创建的不同动作注册处理程序的正确方法是什么(例如:$**$:add:31222:)?

+0

“打印页面应该直接使用条形码servlet作为烧烤” - 呃? :-P – 2010-10-20 03:05:42

+3

大多数(如果不是全部)条形码扫描仪的工作方式几乎与USB数字键盘一样。他们扫描一个条形码,然后“键入”数字,就好像它是一个键盘一样 - 所以网页实际上并不需要特殊的软件来接收来自条形码扫描器的输入。 – 2010-10-20 03:07:24

+0

我最喜欢搞清楚javascript方面。 – rmarimon 2010-10-21 21:29:09

回答

3

我做了一个类似的应用程序,所以这里是我的两分钱。

USB扫描仪基本上像USB键盘一样工作。大多数人会发送一个回车键作为终止字符,但这可以在大多数设备上进行配置。我依靠终止字符在我的用户界面中执行操作。 (回车会默认提交当前选择的表格。)

另一个问题是,如果这是一个移动应用程序,你真的想避免往返于服务器尽可能多。我通过在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); 
    } 
} 

这基本上是一个手动编码的状态机。当快递员检查'我想开始扫描这个订单' - 条形码时,您会进入一种模式,其中每个输入都会发送到您的扫描处理程序。当他扫描“我完成了” - 条形码,你验证结果等。这可以通过实际使用真实状态机来改进。

您应该保持条码尽可能简单。像'SCAN','EXIT','NOTHING_MORE_TO_SCAN'这样的命令是很好的,因为它们是通用的,你的应用程序不需要解析条形码的含义。

让他们简单化的另一个原因是,您遇到标签已损坏且无法扫描的情况。然后,用户必须能够手动输入数据,而无需花费额外的时间查找特殊字符等。