2013-04-16 5 views
10

मैं अपने gwt jsni समारोह अंदर सेjQuery उपयोग jsni

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

उपयोग करने में सक्षम नहीं हूँ। मैंने कोशिश की कि

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

लेकिन यह भी काम नहीं कर रहा है। मुझे लगता है कि मैं यहाँ वाक्यविन्यास याद कर रहा हूँ। क्या कोई

+0

आपकी जेएसनी विधि (रिटर्न टाइप, पैरामीटर इत्यादि) का पूरा कोड क्या है? क्या आप अपने index.html में jquery.js लोड कर रहे हैं? क्या आपका कोड निष्पादित होने पर आपको कोई त्रुटि मिलती है? –

उत्तर

12

तीन इस प्रश्न के लिए समाधान का सुझाव दे रहा हूँ:

1- आपका Jsni कोड को छोड़कर आप इसी में यह संलग्न करने के लिए है कि ठीक लग रहा है मूल कार्य और एक डबल (या कोई अन्य नंबर प्रकार लौटाएं यदि आप कास्टिंग बनाने के लिए चाहते हैं)।

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

आप के माध्यम से त्रुटियों देखना चाहता था, तो आपके UncaughExceptionHandler आप के बजाय jQuery का उपयोग कर के, एक $entry ब्लॉक

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

2- में अपने कोड लपेट लेकिन चाहिए, मैं तुम्हें gwt-query उर्फ ​​gQuery उपयोग करने के लिए प्रोत्साहित करते हैं। तो आपको अपने .html में jQuery लोड नहीं करना होगा और आपको अपने ऐप में jsni से निपटने की आवश्यकता नहीं है।

gQquery के साथ आपके पास लगभग एक ही jQuery वाक्यविन्यास है लेकिन जावा में, इसलिए आपके पास सुरक्षित, रिफैक्टरिंग, परीक्षण टाइप है .... लेकिन साथ ही, आपके पास दर्जनों उपयोगिताओं (सरल AJAX, वादे, चयनकर्ता, आदि) होंगे जीडटी कोर में नहीं हैं।

gQuery एक हल्के वजन वाली लाइब्रेरी है, जो पूरी तरह से gwt में स्क्रैच से पुनः लिखा गया है। यह jQuery लाइब्रेरी का एक रैपर नहीं है (जैसा कि दूसरे जवाब में गलत तरीके से कहा गया है), आपको अपने पृष्ठों में jquery.js को शामिल करने की आवश्यकता नहीं है।

किसी भी अन्य जीडब्ल्यूटी लाइब्रेरी की तरह, gwt कंपाइलर किसी भी चीज़ से छुटकारा पाता है जिसे आप gquery से उपयोग नहीं करते हैं। आपके दृष्टिकोण में, आपके ऐप को सभी jquery सामान लोड करना होगा।

अपने मामले में

तो, और gquery अपने जावा कक्षाओं में इस कोड लिखने का उपयोग कर: अंत में

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

3-, आप शुद्ध gwt कोड का उपयोग कर पाने के लिए एक तत्व की भरपाई करने का विकल्प है, अगर आप इसकी आईडी जानते हैं:

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

जेएसएनआई विधि में "डबल" और GQUERY और GWT में "int" क्यों है ??? –

+0

विकल्प 3 काम कर रहा है ... आपको बहुत धन्यवाद ... – javalearner

+0

जेएस केवल संख्याओं के लिए एक प्रकार है, इसलिए जेएसएनआई से एक नंबर वापस करने का प्राकृतिक तरीका युगल का उपयोग कर रहा है, अन्यथा gwt को कास्टिंग से निपटना होगा (बेशक आप कर सकते हैं विधि हस्ताक्षर बदलें और एक int वापस करें और कास्टिंग करने के लिए gwt छोड़ दें)। Gquery एक int देता है क्योंकि यह GWT में 'getOffsetTop() 'रिटर्न मिलता है और हम तत्वों के शीर्ष –

0

मुझे लगता है कि आपने अपने होस्ट पेज में jquery लाइब्रेरी जोड़ा है।

सही सिंटैक्स

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

है और यह मानते हुए आप बस GWT में jQuery का उपयोग शुरू किया।

मैं दृढ़ता से एक हल्के वजन तीसरे पक्ष के पुस्तकालय

GWTQuery

+0

जानकारी के लिए धन्यवाद। मैं इस तरह jsni फ़ंक्शन से मान वापस करने की कोशिश कर रहा हूं। लेकिन इसे पाने में सक्षम नहीं हूं। 'Code'public स्थिर देशी पूर्णांक getIFrameTop (स्ट्रिंग profileId)/* -।।। { \t \t $ WND $ (function() { \t \t वापसी $ WND $ (" # "+ profileId) .offset() शीर्ष \t \t}); \t} - * /; 'कोड' – javalearner

+0

अपने पूर्ण कोड के साथ प्रश्न अपडेट करें और क्या आप सुनिश्चित हैं कि आपका नियंत्रण जेएनएसआई के अंदर आ रहा है ?? पहली पंक्ति में एक चेतावनी डालने के साथ जांचें –

+0

@ बडशाह गलती: GWTQuery नहीं है jquery का एक रैपर, gwtquery पूरी तरह से gwt में लिखा पुस्तकालय है। आपने इसे gwt-jquery से जोड़ा है जो उनके पृष्ठ की जानकारी के आधार पर एक रैपर होना चाहिए, क्योंकि वे अपना कोड प्रकाशित नहीं करते हैं (जब तक कि आप हाथ से जार को असम्पीडित नहीं करते) –

1

एक विनम्र eval के साथ एक आसान तरीका है।

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

तो बस अपनी स्क्रिप्ट

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

का उपयोग और क्योंकि अपने GWT कोड के अंदर कहा जाता है कि आप इसे एक सुरक्षित एक के रूप में अपने कोड पर विचार कर सकते हैं।

+0

इस दृष्टिकोण का एक नकारात्मक पक्ष यह है कि आपको उस स्ट्रिंग की सामग्री के भीतर कोई आईडीई विश्लेषण नहीं मिलता है जिसे आप eval भेजने के लिए भेज रहे हैं। इस तरह, यदि आपके पास कहीं टाइपो है, या एक अपरिभाषित संपत्ति कॉल कर रहे हैं, तो आप रनटाइम तक नहीं जान पाएंगे। – Ronald

+0

आप सही, सावधानी के साथ उपयोग के लिए है। –

संबंधित मुद्दे