مع GWT ، هل هناك طريقة لعدم تحميل أجهزة واجهة المستخدم في ملفات Uibinder XML؟

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

  •  29-09-2019
  •  | 
  •  

سؤال

أحد التصميمات الشائعة لدي مع GWT هو إنشاء عنصر واجهة مستخدم يحتوي على طفلان: A و B.

أعلنت هاتين المصغرين A و B في ملف Uibinder المرتبط بعامل المستخدم الرئيسي الخاص بي.

ما أريد القيام به هو تحميل أو عدم عنصر واجهة المستخدم اعتمادًا على بيان IF.

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

هل هناك طريقة لإعلان عناصر واجهة مستخدم في Uibinder ثم عدم تحميلها؟

شكرًا

تحرير: بعد الكثير من المناقشات ، يتمثل النهج المثالي في الإعلان عن حقل "يتم توفيره = صحيح" و "اختياري = صحيح" عندما يكون الاختياري = صحيح ، يجب ألا يرمي CreateAndBindui استثناءً إذا كان الحقل فارغًا. هذا نهج نظيف.

إذا كنت تعتقد أن هذه الميزة يجب أن تكون موجودة في GWT ، فيرجى تنظيم هذه المشكلة:http://code.google.com/p/google-web-toolkit/issues/detail؟id=5699

تحرير 2: يبدو أن استخدام LazyPanel كما هو موضح بواسطة Thomas طريقة أفضل للتعامل مع هذا.

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

المحلول

لقد تعثرت في قضية GWT ، التي قادتني إلى هنا ، لذا إليك رأيي ، بعد 20 شهرًا.

إستخدم LazyPanel وتعيينها على visible="false" بحيث لا يتم بناء المحتوى حتى تحتاج إليه (ببساطة اتصل setVisible(true) للكشف عنها ، مما يؤدي إلى تخصيص الكسول لمحتواه.

LazyPanel تم دمجه بالكامل مع UiBinder بحيث تعلن محتواه في نفس قالب Uibinder ، كما لو كان أ SimplePanel, ، حتى دون أن تهتم بإنشاء فئة فرعية من LazyPanel. نرى https://developers.google.com/web-toolkit/doc/2.4/devguideuibinder#lazy

نصائح أخرى

أود أن أعود المنطق. إذا لم تكن بحاجة إلى عنصر واجهة المستخدم قم بإزالته

widget.removeFromParent();

أعتقد أنه نهج أنظف ، لأن Uibinder يحدد تلقائيًا وإنشاءها.

نظرًا لأن الشرطية غير مسموح بها في Uibinder XML ، أقترح عليك تحديدها أصحاب نائبة (أي اللوحات) في ui.xml, ، احصل على إشارة إليهم في فئة العرض الخاصة بك وقرر ما إذا كان هناك حاجة إلى إنشاء عنصر واجهة مستخدم محددة وإضافتها أم لا.

هذا نهج شائع عند استخدام نمط MVP مع مقدمي العروض المتداخلين.

تعديل:

حتى يتم تنفيذ طلبك من قبل مطوري GWT ، يمكنك تمديد FlowPanel والكتابة فوق add(Widget) طريقة للتحقق من null كما في:

public class ExtendedFlowPanel extends FlowPanel {

    public ExtendedFlowPanel() {
        super();
    }

    @Override
    public void add(Widget w) {
        if (w != null) {
            super.add(w);
        }
    }
}

بهذه الطريقة يمكنك استخدامها provided = true ويمر null إلى اللوحة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top