我正在检索我想要将实体变量设置为的发出代码块中的值。这就是我想要做的事情:
rule read_form {
select when web submit "#loginForm"
pre {
}
{
emit <|
function myFunction() {
var myValue = 10;
}
myFunction();
|>;
}
fired {
set ent:myValue myValue;
}
}
答案 0 :(得分:3)
您的架构方式无效。
原因如下:
当事件请求首次进入时,将在Kynetx服务器上评估select语句和pre块。如果select语句的计算结果为true,则规则将在HTTP响应中返回emit JavaScript,以响应引发的事件Kynetx服务器。在HTTP响应从Kynetx服务器返回浏览器之前,如果您有一个将在HTTP响应中返回的事件,则会执行postlude中的被触发语句。这意味着在将javascript返回到浏览器之前,会在Kynetx服务器上评估和执行select语句,pre block和postlude块。所以我想简短的回答是,后缀不知道“myValue”的价值是什么,因为范围非常不同(不同的机器)。
希望这会有所帮助。我可能应该用一个图表来解释它,但我有一些关键的工作我需要今晚完成。根据您的回答,我可能会回到这个问题并在以后更好地回答。
那么,你怎么能让这个工作?你可以通过在你发出的javascript块中传递另一个传递所需值的事件来完成我认为你想要做的事情。这意味着该值将在接收引发事件的规则的pre块和postlude块中可用,因此您可以将其保存在实体变量中。
您还可以查看我在博客文章中发布的关于从JavaScript中提取事件的帖子,这些帖子可能有助于更多地了解该主题http://kynetxappaday.wordpress.com/2010/12/16/day-8-raise-web-events-from-javascript/