如何调用 KRL 规则集全局块中定义的 JavaScript 函数?
我尝试在规则集的全局块中定义一个 javascript 函数,但是当我尝试运行该函数时,我得到“f() 未定义”。
global {
emit <|
function f() { return 42 };
|>;
}
rule use_function {
select when pageview ".*"
{
emit <| result=f(); console.log("The value is "+result+"."); |>;
}
}
我需要做什么才能使我的函数可调用?
I tried to define a javascript function in the global block of my ruleset, but when I try to run the function I get 'f() is not defined'.
global {
emit <|
function f() { return 42 };
|>;
}
rule use_function {
select when pageview ".*"
{
emit <| result=f(); console.log("The value is "+result+"."); |>;
}
}
What do I need to do to make my function callable?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你的代码应该可以工作。
这是另一个与你的例子相似的例子,它对我有用。
使用 bookmarklet 在 example.com 上运行应用程序的结果:
当 KRL 生成 JavaScript 在浏览器页面上运行时,它会将代码放入闭包中,这可能会产生一些意外的行为。在您的代码和我的示例中,发出的 JavaScript 在同一范围内运行,因此函数调用可以相互访问。如果您使用 JavaScript 监视按钮单击,然后调用全局块中发出的函数,则可能会遇到单击函数与全局发出的 JavaScript 函数不在同一范围内的问题。
Your code should be working.
Here is another example similar to yours that is working for me.
Results of running app on example.com with bookmarklet:
When KRL generates JavaScript to run on the browser's page it puts the code in closures which can create some unexpected behavior. In your code and my example the emitted JavaScript runs in the same scope so the function calls have access to each other. If you have JavaScript watching for a button click which then calls a function emitted in the global block you may have issues with the click function not being in the same scope as the global emitted JavaScript function.