سؤال

بدأت في البحث في استخدام GWT بالاشتراك مع UiBuilder. أنا في حيرة بعض الشيء حول كيفية استخدامك @UiHandler(..) التوجيه لجعل رمز مقبض الأحداث البسيط كما هو مكتوب في توثيق GWT:

@UiHandler("button")
void handleClick(ClickEvent e) {
  Window.alert("Hello, AJAX");
}

في هذه الحالة الطريقة handleClick يستخدم. كيف تعرف لكل عنصر واجهة مستخدم GWT ما هي الطرق التي يمكن إنشاؤها بها @UiHandler؟ بالنسبة للبعض ، يمكنك أيضًا إنشاء ملف doClose() طريقة.

ولكن ما الذي يمكنك استخدامه ، على سبيل المثال ، أ ListBox للحصول على حدث تم تحديد عنصر؟ أين يمكنني رؤية هذا في الوثائق؟

هل كانت مفيدة؟

المحلول

المعلمة التي تنتقلها إلى @UiHandler التعليق التوضيحي هو اسم الحقل المناسب الذي تريد تعيينه *Handler. لذلك ، في هذه الحالة تقوم بتعيين ملف ClickHandler إلى Button button (في الواقع ، نحن نعرف فقط اسم الحقل).

بالنسبة لكيفية عمل هذا بالضبط - إنه جزء من GWT Magic :) أعتقد أنه ، تمامًا مثل أي رمز آخر مرتبط بـ Uibinder (أعتقد أنه كان هناك عرض تقديمي على Google IO ، أظهر الكود الذي يولده UiBinder) ، في وقت التجميع التحويل البرمجي يكتشف ما الذي يحدث. في هذا المثال: لدينا ملف Button button, ، ولدينا @UiHandler طريقة مشروحة لها ClickEvent المعلمة -> ذلك يجب يعني أنها أ ClickHandler (لاحظ أن اسم الطريقة لا قضيه). لذلك دعونا نضيف بعض التعليمات البرمجية في وقت الترجمة (في المُنشئ ، على الأرجح) الذي يضيف هذا المعالج إلى الزر. إذا كنت مهتمًا بإجابة أكثر شمولاً - تحقق من المصدر: د

ولكن ما الذي يمكنك استخدامه ، على سبيل المثال ، أ ListBox للحصول على حدث تم تحديد عنصر؟ أين يمكنني رؤية هذا في الوثائق؟

في ال GWT API Reference. في هذه الحالة ، ربما تبحث عنها listbox.addChangeHandler. لكنك عادة لن تجد @UiHandler رمز ذي صلة هناك - هذا لأنه سيكون زائداً - يمكنك دائمًا بناء @UiHandler طرق بنفس الطريقة:

  1. يمكنك التحقق من *Handler التي تريد إضافتها ، قل ChangeHandler
  2. لديها void onChange(ChangeEvent event) - لذلك ، تحتاج طريقتك ChangeEvent المعلمة ويجب أن تبدو هكذا:

    @UiHandler("listBox")
    void whateverName(ChangeEvent event) {
        // ...
    }
    

نصائح أخرى

ربما تكون مشكلتك في طريقة onModuleLoad الخاصة بك:

public void onModuleLoad() 
{       
    HelloWorld helloWorld = new HelloWorld("BOTAO"); 

    // Using this way @UiHandler will not work
    //Document.get().getBody().appendChild(helloWorld.getElement()); 

    // correct way
    RootPanel.get().add(helloWorld);  
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top