用 E4X 和 Prototype 创建 Ajax mindreader 应用程序,第 1 部分: 构建 Twenty Questions 基础结构
2010-03-09 00:00:00 来源:WEB开发网注意,在这个清单的顶部,创建了一个新对象 currentTargetSet,它最初包含整个 targets 元素。但是,在 answer_question() 中,将删减其中的内容。
获得用户给出的答案之后(注意,这个函数的参数是实际的 span),可以对 currentTargetSet 进行过滤,创建一个新的 XMLList remainingTargets。
注意,这个表达式中使用了两个连续的点号。XPath 使用双斜线(//)表示后代,而 E4X 使用两个连续的点号(..)。在这里,首先获得根元素的所有 target 子元素,然后对它们进行过滤。
我们来仔细看看这个过滤器。在看到方括号时,您可能会想到 XPath 谓词,但这并不是 XPath 谓词。实际上,answer 变量是散列。这种方式与从 JavaScript 引用表单元素的传统方式相似,表达式 answer["answerValue1"] 相当于 answer.answerValue1。
这种形式的优点是,可以动态地指定要搜索的元素。在这个示例中,过滤器寻找 target 元素的条件是,元素的 answer.answerValue1 后代元素的值与用户给出的答案匹配。
与前面一样,过滤过程会产生一个 XMLList,然后可以检查这个列表的长度,从而判断目前还留下多少个目标。例如,如果用户选择 “Animal”,那么会留下两个目标,见图 5。
图 5. 留下两个目标
留下两个目标之后,需要找出下一个要问的问题,从而区分这两个目标。
选择下一个要问的问题
根据算法,下一个问题应该是与剩余目标最相关的问题,所以必须做一个假设。在生产系统中,可能会存储问过的每个问题,或者以其他方式确保排除以前问过的问题。在这个示例中,假设随着时间的推移以及知识库包含更多东西,问题的针对性会越来越强。我假设在游戏进行过程中,questionid 值逐渐增大,这样就很容易排除已经问过的问题,见清单 9。
编缉推荐阅读以下文章
- 用 E4X 和 Prototype 创建 Ajax mindreader 应用程序,第 2 部分: 使 mindreader 应用程序更智能化
更多精彩
赞助商链接