JSNI - 从 JS 函数调用 Java 方法
我试图直接从 JSNI 函数调用 java 方法,但由于某种原因它永远无法工作。我在这里做错了什么? :(
这是我的代码
/**
For UI button click method...
*/
private native void test(String param)
/*-{
var a=(function b(p)
{
this.@com.(...).TestClass::setTest(Ljava/lang/String;)(p);
})(param);
}-*/
private void setTest(String param){Window.alert(param);}
感谢所有有用的评论
I am trying to invoke a java method right from my JSNI function but for some reason it never works. What am I doing wrong here? :(
Here is my code
/**
For UI button click method...
*/
private native void test(String param)
/*-{
var a=(function b(p)
{
this.@com.(...).TestClass::setTest(Ljava/lang/String;)(p);
})(param);
}-*/
private void setTest(String param){Window.alert(param);}
All useful comments are appreciated
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您需要在
function
块之外引用this
:You need to take a reference to
this
outside thefunction
block:您对 this 关键字的使用可能会导致问题。在您的上下文中,
this
关键字指向闭包,理想情况下它应该指向 GWT 从该语句编译的函数
。
尝试使用此代码段(我不确定语法是否正确,请使用 GWT JSNI wiki 进行验证):
顺便说一句,拥有一个其唯一目的是调用另一个函数的函数是一种代码味道。
Your usage of the this keyword may cause the problem. In your context the
this
keywords points to the closureIdeally it should point to the function that GWT compiles from
this statement.
Try using this code segment (I'm not sure if I got the syntax right, verify with GWT JSNI wiki) :
BTW, Having a function whose sole purpose is to call another function is a code smell.
是的,正如 Zasz 所指出的,你的代码过于复杂了(如果你真的想提供一个 JavaScript 方法,但在这种情况下你必须以完全不同的方式来做......)
所以我测试了代码,这个作品:
Yes, as Zasz is pointing out, you are overcomplicating your code (expect if you really want to provide a JavaScript method, but in that case you have to do it in a complete different way...)
So I tested the code and this works: