القطعة لإخطار القطعة (الأدوات) الأخرى

StackOverflow https://stackoverflow.com/questions/83106

  •  01-07-2019
  •  | 
  •  

سؤال

كيف ينبغي لعناصر واجهة المستخدم في GWT إعلام عناصر واجهة المستخدم الأخرى بتحديث نفسها أو تنفيذ بعض الإجراءات الأخرى.

هل يجب أن أستخدمsinkEvent/onBrowserEvent؟وإذا كان الأمر كذلك فهل هناك طريقة لإنشاء أحداث مخصصة؟

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

المحلول

لقد قمت بحل هذه المشكلة باستخدام نمط المراقب ومركزي مراقب.وحدة التحكم المركزية هي الفئة الوحيدة التي لديها معرفة بجميع عناصر واجهة المستخدم في التطبيق وتحدد الطريقة التي تتناسب بها معًا.إذا قام شخص ما بتغيير شيء ما في عنصر واجهة المستخدم "أ"، فإن عنصر واجهة المستخدم "أ" يطلق حدثًا.في معالج الأحداث، يمكنك الاتصال بوحدة التحكم المركزية من خلال استدعاء "notifyObservers()"، الذي يُعلم وحدة التحكم المركزية (وغيرها اختياريًا، ولكن من أجل التبسيط، لن أخوض في ذلك) أن إجراءً معينًا (تمرير مثيل التعداد "MyEvent" ) قد حدث.

بهذه الطريقة، يتم تضمين منطق تدفق التطبيق في فئة مركزية واحدة ولا تحتاج الأدوات إلى مجموعة كبيرة من المراجع لبعضها البعض.

نصائح أخرى

إنه سؤال مفتوح للغاية - على سبيل المثال، يمكنك إنشاء فئة معالج الأحداث الثابتة الخاصة بك والتي تشترك فيها الأدوات.على سبيل المثال:

Class newMessageHandler {
    void update(Widget caller, Widget subscriber) {
        ...
    }
}

customEventHandler.addEventType("New Message", newMessageHandler);

Widget w;
customEventHandler.subscribe(w, "New Message");

...
Widget caller;

// Fire "New Message" event for all widgets which have
// subscribed
customEventHandler.fireEvent(caller, "New Message");

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

لذا ، إليك تنفيذ (عينة) ، أولاً ، دعنا ننشئ حدثًا جديدًا:

import java.util.EventObject;
import com.google.gwt.user.client.ui.Widget;

public class NotificationEvent extends EventObject {
    public NotificationEvent(String data) {
        super(data);
    }
}

ثم نقوم بإنشاء واجهة معالج الأحداث:

import com.google.gwt.user.client.EventListener;

public interface NotificationHandler extends EventListener {
    void onNotification(NotificationEvent event);
}

إذا كان لدينا الآن عنصر واجهة مستخدم لتنفيذ الإخطار Hanlder ، فيمكننا تشغيل الحدث عن طريق الاتصال:

((NotificationHandler)widget).onNotification(event);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top