2014-10-09 2 views
1

Можно ли вызвать собственный метод из другого родного метода в том же классе таким образом?Как вызвать метод JSNI из метода JSNI в GWT

public native JavaScriptObject mySECONDJsniMethod(String name) /*-{ 
     //.. 
     return secondVar; 
}-*/; 

public native JavaScriptObject myFIRSTJsniMethod(String name) /*-{ 
     var secondVar = mySECONDJsniMethod(name); 
     //.. 
     return firstVar; 
}-*/; 

В моей консоли Chrome он возвращает: Uncaught TypeError: mySECONDJsniMethod is not a function. Любые идеи? Спасибо.

ответ

1

Да. В JSNI для myFIRSTJsniMethod() используйте обычный синтаксис JSNI для вызова метода Java.

Например, если эти два метода в классе com.mycompany.Test, вы могли бы назвать mySECONDJsniMethod() следующим образом:

public native JavaScriptObject myFIRSTJsniMethod(String name) /*-{ 
    var secondVar = [email protected]::mySECONDJsniMethod(Ljava/lang/String;)(name); 
    //.. 
    return firstVar; 
}-*/; 

Смотрите документацию GWT на Accessing Java Methods and Fields from JavaScript для получения дополнительной информации.

EDIT: Вот полный компилируемый пример:

package com.mycompany.client; 

import com.google.gwt.core.client.EntryPoint; 
import com.google.gwt.core.client.JavaScriptObject; 

public class SO26277049 implements EntryPoint { 

    @Override 
    public void onModuleLoad() { 
     final JavaScriptObject firstVar = myFIRSTJsniMethod("hello world!"); 
    } 

    public native JavaScriptObject mySECONDJsniMethod(String name) /*-{ 
     var secondVar = { 
      name: name 
     }; 
     return secondVar; 
    }-*/; 

    public native JavaScriptObject myFIRSTJsniMethod(String name) /*-{ 
     var secondVar = [email protected]::mySECONDJsniMethod(Ljava/lang/String;)(name); 
     $wnd.alert(secondVar.name); 
     var firstVar = secondVar; 
     return firstVar; 
    }-*/; 
} 
+0

Теперь она возвращается, что * mySECONDJsniMethod * не определено @Daniel Trebbien. – django

+0

@django: Что такое полностью квалифицированное имя класса, содержащее эти два метода? Вы должны использовать это вместо 'com.mycompany.Test'. Я отредактировал свой ответ, чтобы дать полный пример. –