【发布时间】:2012-03-20 07:27:09
【问题描述】:
我有一个定义任务的 XML 文档,该任务是要对某些数据执行的操作的列表。我需要将此“任务列表”转换为可以在以后调用的 Javascript 方法,该方法又会调用一系列带有适当数据的预定义方法。您将如何实现这一目标?
重要说明:
我不担心 XML 解析。我对如何实际构建任务方法更感兴趣,包括将基本数据绑定到预定义的操作方法。这就是我正在努力解决的部分。
编辑:我已经修改了我的示例,使其更有趣,希望更清晰。
XML:
<task id="enter-castle">
<if holding="castle-key">
<print message="You unlock the castle door and enter." />
<destroy item="castle-key" />
<goto location="castle" />
<else>
<print message="The castle door is locked." />
</else>
</if>
</task>
Javascript:
Game = {
print: function(message) {
// display message
},
destroy: function(item) {
// destroy the object
},
goto: function(location) {
// change player location
},
ifHolding: function(item) {
// return true if player has item
}
};
parseTask(taskNode) {
var taskId = taskNode.getAttribute('id');
// What goes here??
Game.tasks[taskId] = /* ??? */;
}
当我在 <task id="enter-castle"> 节点上调用 parseTask() 时,这应该会创建一个函数,实际上在调用时会执行以下操作:
Game.tasks.enterCastle = function() {
if (Game.ifHolding('castle-key')) {
Game.print("You unlock the castle door and enter.");
Game.destroy('castle-key');
Game.goto('castle');
} else {
Game.print("The castle door is locked.");
}
}
【问题讨论】:
-
尽管您可以理解 XML 到“已编译”的示例,但不清楚您想要什么。你卡在哪个部分?您当前的输出不会做任何有意义的事情,除非
this是一个全局对象,并且您的函数是在全局命名空间中定义的。您能否编辑您的问题,以更清楚地描述您遇到的问题? -
我的例子当然不是一个工作或完整的例子。我会尽量让问题更清楚。
-
在这一点上,每一种方法都给我带来了相当大的麻烦。我现在正在考虑只存储层次结构以供以后解释,以便在执行“任务”时可以即时解释它。
标签: javascript binding code-generation dynamic-method