[java] معالج الحدث المخصص GWT



3 Answers

شكرا لجميع الردود. لقد جاء الزكاة الأقرب إلى إعطائي الإجابة التي أحتاج إليها ، إلا أنني توصلت إلى نموذج أبسط قليلاً.

هدفي الرئيسي هو تجنب استخدام متغير ثابت لبني البيانات الرئيسية. أنا أيضا ضرب مشكلة محاولة معرفة ما إذا كان قد تم استرجاع بنية البيانات الرئيسية بنجاح من قاعدة البيانات في وقت محاولة الوصول إليها وماذا تفعل عندما لا تكون (أي عندما تكون فارغة).

بعد مشاهدة بنية مجموعات أدوات الويب من Google: أفضل الممارسات بالنسبة إلى تصميم فيديو تطبيق GWT من Google IO ، بدت فكرة حافلة الحدث مثالية.

سأقوم بنشر الحل هنا في حال كان يساعد أي شخص آخر.

أولاً ، قم بإنشاء فئة المعالج. لاحظ المرجع إلى فئة الحدث بالفعل:

public interface CategoryChangeHandler extends EventHandler {
    void onCategoryChange(CategoryChangeEvent event);
}

انتقل الآن إلى فئة الحدث. هذا أعطاني أكثر المشاكل:

public class CategoryChangeEvent extends GwtEvent<CategoryChangeHandler> {

    private final List<Category> category;

    public CategoryChangeEvent(List<Category> category) {
        super();
        this.category = category;
    }

    public static final Type<CategoryChangeHandler> TYPE = new Type<CategoryChangeHandler>();

    @Override
    protected void dispatch(CategoryChangeHandler handler) {
        handler.onCategoryChange(this);
    }

    @Override
    public com.google.gwt.event.shared.GwtEvent.Type<CategoryChangeHandler> getAssociatedType() {
        return TYPE;
    }

    public List<Category> getCategories(){
        return category;
    }

}

الآن أصبح بإمكاني استخدام فصول "معالج" و "حدث" مثل ذلك عند إعادة تحميل بنية البيانات الرئيسية هذه:

حصل هذا الرمز على بنية البيانات ويريد إبلاغ كل من يستمع بأنه تم تحديثه:

CategoryChangeEvent event = new CategoryChangeEvent(result);
eventBus.fireEvent(event);

هذا الرمز هو تنفيذ الحدث

public class PopulateCategoryHandler implements CategoryChangeHandler {

    @Override
    public void onCategoryChange(CategoryChangeEvent event) {
        tearDownCategories();

        List<Category> categories = event.getCategories();
        populateCategories(categories); 
    }

}
Question

هل يمكن أن يعطيني أحد مثالاً على إنشاء مجموعة مخصصة من الحدث والمعالج. لنفترض أن لديك كائن شخص تريد أن تعرفه أدواتك إذا تم تحديثه.

يمكنك إنشاء HandlerManager والآن لديك لإنشاء حدث ومعالج. كيف يمكنك تحديد هذه الفئات بحيث يمكنك الاشتراك وإطلاق الأحداث؟

معظم الأحداث تستند إلى DOM ، بينما أريد إنشاء بعض الأحداث والمعاملات المخصصة التي يمكنني إطلاقها خارج أي حدث يستند إلى المتصفح.




أعتقد أن المثال الأكثر اكتمالاً وتفصيلاً في هذا المقال

ويحتوي أيضًا على مثال لمشروع يوضح كيفية الاستخدام الصحيح لتعريف الأحداث المخصصة واستخدام فئة HandlerManager في GWT.




تعليق واحد إضافي: إذا حاولت القيام بشيء مماثل للتفاعل في تطبيق رئيسي إلى حدث تم إطلاقه من أحد مكونات واجهة المستخدم الرسومية المخصصة (مثل مركب وما إلى ذلك) ، أعتقد أنه يجب عليك توصيل التطبيق الرئيسي بشكل صريح للتعامل مع حدث المكون:

yourComponent.addHandler(this, YourEvent.TYPE);

حيث "هذا" هو الفئة التي تقوم بتطبيق واجهة معالج المخصصة الخاصة بك.







Related