2013-04-16 28 views
10

benim gwt jsni fonksiyonu içindenKullanım jquery

$("#"+profileId).offset().top 

kullanabilmek için değilim jsni. Ben bu

'u denedim, ancak bu da çalışmıyor. Burada sözdizimi kaçırdığımı hissediyorum. Herhangi biri

+0

jsni yönteminizin tüm kodu nedir (dönüş türü, parametreler vb.)? jquery.js dosyasını index.html dosyanıza mı yüklüyorsunuz? Kodunuz çalıştırıldığında herhangi bir hata alıyor musunuz? –

cevap

12

Üç çözümler öneriyorum:

1- Kişisel Jsni kodu tekabül içine alın zorunda olması dışında iyi görünüyor yerel işlev ve bir çift (veya döküm yapmak için gwt isterseniz başka bir sayı türü) döndürün.

native double getTop(String profileId) /*-{ 
    return $wnd.$("#" + profileId).offset().top; 
}-*/; 

Eğer aracılığıyla hataları görmek istiyorsa senin UncaughExceptionHandler yerine jQuery kullanmak yerine, bir $entry blokta

native double getTop(String profileId) /*-{ 
    return $entry(function(data) { 
    return $wnd.$("#" + profileId).offset().top; 
    }); 
}-*/; 

2- kodunuzu sarın Ama gerekir, sana gwt-query aka gQuery kullanmaya teşvik ediyoruz. Yani, jQuery'nizi .html'ye yüklemeniz gerekmez ve uygulamanızda jsni ile uğraşmanıza gerek yoktur.

gQquery ile hemen hemen aynı jQuery sözdizimine sahipsiniz, ancak java'da güvenli yazın, refactoring, test edin .... Ama aynı zamanda düzinelerce yardımcı programa sahip olacaksınız (en basit ajax, vaatler, seçiciler vb.) gwt çekirdeğinde değil.

gQuery tam GWT sıfırdan yeniden hafif bir kütüphanesidir. Bu, kendi sayfalarında jquery.js dahil etmek yok (gibi yanlış diğer yanıtında söylenir) jQuery kütüphanesinin bir sarıcı DEĞİLDİR.

başka gwt kütüphane ile olduğu gibi, gwt derleyici size gquery kullanmak yok bir şey kurtulmak istiyorum. Yaklaşımınızda uygulamanız tüm jquery öğelerini yüklemelidir. senin durumunda Yani

, ve .java sınıflarında bu kodu yazmak gquery kullanarak:

import static com.google.gwt.query.client.GQuery.*; 
... onModuleLoad() { 
    int top = $("#"+profileId).offset().top; 
} 

3- Son olarak, eğer, bir elementin ofset almak için saf gwt kodu kullanma seçeneği onun kimliğini biliyorum:

int top = DOM.getElementById(profileId).getOffsetTop(); 
+0

JSNI yönteminde "double" ve GQUERY ve GWT'de "int" neden ??? –

+0

Seçenek 3 çalışıyor ... Çok teşekkürler ... – javalearner

+0

JS sadece numaraları için bir tür vardır, bu yüzden jsni'den bir sayı döndürmek için doğal yol iki katına çıkar, aksi halde gwt döküm ile uğraşmak zorundadır. yöntem imzasını değiştirmek ve bir int döndürmek ve döküm yapmak gwt bırakın. Gquery bir int döndürür, çünkü getOffsetTop() işlevi GWT'de döner ve elemanların hesaplanması için onu temsil ederiz. –

0

yardım edebilir mi? Ana sayfanıza jQuery kitaplığı eklediğinizi kabul ediyorum.

doğru sözdizimi

private native int myJquery() /*-{ 
    $wnd.$(function() {   //may be you forgot this line 
    return $wnd.$("#"+profileId).offset().top; 
    }); 
}-*/; 

olduğunu Ve sadece GWT jquery kullanmaya başladı varsayarak.

şiddetle bir hafif üçüncü taraf kitaplığı bu soru için

GWTQuery

+0

Bilgi için teşekkürler. Değeri jsni işlevinden böyle döndürmeye çalışıyorum. ama bunu elde edemiyorum. 'Code'public statik yerli int getIFrameTop (Dize profileId)/* -... { \t \t $ wnd $ (function() { \t \t dönüş $ wnd $ ("#" + profileId) .offset() üst \t \t}); \t} - * /; 'code' – javalearner

+0

sorunuzu tam kodunuzla güncelleştirin ve kontrolün JNSI içine geldiğinden emin misiniz? İlk satırdaki uyarıyı koyarak kontrol edin –

+0

@Baddshah error: GWTQuery değil jquery bir sarıcı, gwtquery tamamen gwt'de yazılmış bir kütüphanedir. Kendi kodlarını yayınlamadıkları için sayfa bilgisine dayalı bir sarıcı olması gereken gwt-jquery ile bağlantı kurdunuz (jareyi el ile açmadığınız sürece) –

1

kolay bir yolu mütevazi bir eval beraberdir.

public static native void eval(String toEval)/*-{ 
    return $wnd.eval(toEval);  
}-*/; 

Sonra sadece komut

eval("$('#'" + profileId + ").offset().top"); 

kullanmak Ve çünkü güvenli bir biri olarak kod düşünebiliriz GWT kod içine denir.

+0

Bu yaklaşımın bir dezavantajı, değerlendirmeye göndermekte olduğunuz dizinin içeriğinde herhangi bir IDE analizi yapmamanızdır. Bu şekilde, bir yerde bir yazım hatası varsa veya tanımlanmamış bir özelliği çağırıyorsanız, çalışma zamanına kadar bilmezsiniz. – Ronald

+0

Doğru, dikkatli kullanım içindir. –