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