我正在设计一个Web应用程序,我正在考虑合并一些条形码读取以方便数据输入。假设我有快递员需要完成的任务列表。我想打印类似于以下页面的内容:
+----------------------------------------------------------------------+
| Task List || || |||| || || ||| (a) |
| |
| Task One ||| || |||||| || ||| (b) |
| Task Two ||| || || | | || ||| (c) |
| Task Three | |||||| || ||| |||| (d) |
| |
| ||||| |||| || || ||| (e) |
+----------------------------------------------------------------------+
条形码由每行末尾的||||| | ||| || (x)
表示。使用条形码servlet作为烧烤,应该直接打印页面。我想有一个通用的方法来拦截这些条形码,并在jQuery中做一些事情。例如:
goto:/tasklist/123:
add:31222:
,add:31223
和add:31224:
submit::
扫描条形码时(a)我会去那个页面。扫描条形码(b),(c),(d)时,我会填充页面中的文本输入。扫描条形码(e)时,我会提交表格。我正在考虑在每个页面上都可以使用某种形式的jQuery监听器,我可以根据条形码的第一个命令向其注册操作。我知道我可以对条形码设备进行编程以包含一些逻辑,但是想要避免使用它,这样任何条形码都可以做到而且我不必处理它们的编程。
我甚至认为每个条形码可能必须以一些魔术标记开始,以区分常规输入和条形码输入。也许像$**$:goto:/tasklist/123:
这样的东西。问题是,我将如何进行jQuery来拦截这组命令,以及为我创建的不同操作注册处理程序的正确方法(例如:$**$:add:31222:
)?
答案 0 :(得分:3)
我做过类似的申请,所以这是我的两分钱。
USB扫描仪基本上像USB键盘一样工作。大多数人会发送一个输入密钥作为终止字符,但这可以在大多数设备上配置。我依靠终止字符在我的UI中驱动操作。 (默认情况下,输入将提交当前选定的表单。)
另一个问题是,如果这是一个移动应用程序,您真的希望尽可能避免往返服务器。我通过在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);
}
}
这基本上是一台手动编码的状态机。当快递员检查“我想开始扫描此订单”条形码时,您将进入一种模式,其中每个输入都会进入您的扫描处理程序。当他扫描“我已经完成”-barcode时,你会验证结果等。这可以通过实际使用真实状态机来改进。
您应该尽可能简化条形码。像'SCAN','EXIT','NOTHING_MORE_TO_SCAN'这样的命令很好,因为它们是通用的,你的应用程序不需要解析条形码的含义。
保持简单的另一个原因是,将遇到标签已损坏且无法扫描的情况。然后,用户必须能够手动输入数据,而无需花费额外的时间来查找特殊字符等。