2011-12-23 45 views
6

Có thể gọi các phương thức Java (GWT) từ Javascript không? Nó cũng không rõ ràng từ tài liệu. Tất cả các mẫu ở đây http://code.google.com/intl/ru/webtoolkit/doc/latest/DevGuideCodingBasicsJSNI.html thể hiện chức năng gọi java từ các hàm JSNI (không phải JS).Làm cách nào để gọi hàm GWT java từ Javascript?

UPDATE 1

Đây là một mã Java:

public class Test_GoogleWeb_JSNI_02 implements EntryPoint { 
/** 
* This is the entry point method. 
*/ 
public void onModuleLoad() { 
} 

public static void Callee() { 
    Window.alert("Callee"); 
} 
} 

Đây là mẫu nút gọi trong html:

<input type='button' value='Call' onclick='Test02()'> 

Và đây là một số chức năng tôi đã cố gắng và đó là không hoạt động:

<script type="text/javascript"> 

    function Test01() { 
     @com.inthemoon.tests.client.Test_GoogleWeb_JSNI_02::Callee()(); 
    } 

    function Test02() { 
     com.inthemoon.tests.client.Test_GoogleWeb_JSNI_02::Callee()(); 
    } 


</script> 

CẬP NHẬT 2

Làm như sau.

Java chuẩn bị:

public void onModuleLoad() { 
    Prepare(); 
} 

public static native void Prepare() /*-{ 
    $doc.calleeRunner = @com.inthemoon.tests.client.Test_GoogleWeb_JSNI_02::Callee(); 
}-*/; 

public static void Callee() { 
    Window.alert("Callee"); 
} 

Caller:

function Test03() { 
     document.calleeRunner(); 
} 

Có cách nào tốt hơn?

+0

bạn có thể gọi một phương thức javascrypt trả về một đối tượng? và sử dụng đối tượng đó? –

Trả lời

10

ví dụ của bạn sẽ không hoạt động vì bạn đang cố gắng sử dụng JSNI trong một số tập lệnh bên ngoài. Nếu bạn muốn gọi một cái gì đó từ bên ngoài JS bạn cần phải sử dụng phương pháp mô tả trong question này hoặc sử dụng GWT exporter

UPDATE:

Cách an toàn nhất để tiếp xúc với những thứ GWT là để bọc gọi trong một số khác chức năng. Ví dụ:

public native void expose()/*-{ 
    $wnd.exposedMethod = function(param){ 
     @com.my.MyClass::myFunction(*)(param); 
    } 
}-*/; 

Nếu không, bạn có thể gặp một số lỗi lạ trong phương thức sản xuất =)

+0

Cảm ơn! Bạn có cập nhật mối quan tâm của tôi Update2 không? Tôi có nghĩa là bạn đề nghị không viết '[email protected] :: myFunction (*) (param)'? Tại sao? – Dims

+0

Điều này có thể ngăn GWT thực hiện một số tối ưu hóa cơ bản. Tác động hiệu suất rất có thể sẽ không lớn, nhưng bạn nên ghi nhớ nó. Ngoài ra theo cách của bạn sẽ chỉ làm việc với tiếp xúc với các phương pháp tĩnh, nó rất có thể phá vỡ nếu bạn cố gắng gọi một số phương pháp dụ. – jusio

+0

bạn có thể gọi phương thức javascrypt trả về một đối tượng không? và sử dụng đối tượng đó? –

Các vấn đề liên quan