2013-12-17 2 views
1

Это со ссылкой на этот пример:GWT вызова функции Java из рукописного JavaScript

package mypackage; 

public MyUtilityClass 
{ 
    public static int computeLoanInterest(int amt, float interestRate, 
             int term) { ... } 
    public static native void exportStaticMethod() /*-{ 
     $wnd.computeLoanInterest = 
     $entry(@mypackage.MyUtilityClass::computeLoanInterest(IFI)); 
    }-*/; 
} 

мне нужно знать яваскрипт кода для вызова этой функции. Если я использую <input type="button" onclick=computeLoanInterest(1,2.1,1)/>, пример работает, но var x = computeLoanInterest(1,2.1,1) does not work. Может кто-нибудь сказать мне, что мне здесь не хватает.

var x = computeLoanInterest(1,2.1,1); делает значение х неопределенных var x = window.computeLoanInterest(1,2.1,1) показывают ошибку несоответствия типов

Благодаря Ravi

+0

это бросить»ошибку или просто вернуть неожиданное значение (возможно 0/не определены?) –

+0

значения й не определенно –

+0

Простейшие совет:. Избавиться от $ записи :) просто написать:' $ wnd.computeLoanInterest = @ mypackage.MyUtilityClass :: computeLoanInterest (IFI) ':) –

ответ

2

Самое простое решение просто избавиться от $ въездной обертки. Просто напишите в вашем способе экспорта JSNI:

public static native void exportStaticMethod() /*-{ 
    $wnd.computeLoanInterest = @mypackage.MyUtilityClass::computeLoanInterest(IFI); 
}-*/; 

Почему так? Функция $ запись определена в com.google.gwt.core.client.impl.Impl , где она выглядит (я удалил комментарии):

public static native JavaScriptObject entry(JavaScriptObject jsFunction) /*-{ 
    return function() { 
     try { 
      return @com.google.gwt.core.client.impl.Impl::entry0(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)(jsFunction, this, arguments); 
     } catch (e) { 
      throw e; 
     } 
    }; 
}-*/; 

В этом нет ничего особенно подозрительно это просто оборачивает ваши функции с какой-либо другой функцией, но ... см метод entry0 подпись:

private static Object entry0(Object jsFunction, Object thisObj, 
    Object arguments) throws Throwable 

он возвращает объект - это, вероятно, почему вы получите ошибку несоответствия типов. И как вы видите, запись вызова $ не добавляет большого значения :).

Смежные вопросы