如何在emit中设置实体变量值

时间:2011-09-21 02:20:28

标签: krl

我正在检索我想要将实体变量设置为的发出代码块中的值。这就是我想要做的事情:

rule read_form {
    select when web submit "#loginForm"
    pre {
    }
    {
        emit <|
            function myFunction() {
                var myValue = 10;
            }
            myFunction();
        |>;
    }
    fired {
        set ent:myValue myValue;
    }
}

1 个答案:

答案 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/