المشكلة مع نقاط دخول متعددة في نفس الوحدة النمطية

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

سؤال

لدي عدة نقاط الدخول في نفس الوحدة.

على سبيل المثال لدي منزل نقطة الدخول للصفحة الرئيسية و المشرف نقطة دخول صفحة المشرف.

<entry-point class='com.company.project.client.HomeModule'/> 
<entry-point class='com.company.project.client.AdminModule'/> 

الطريقة انا الإعداد الآن أنا بحاجة إلى التحقق من somt مثل هذا في بلدي OnModuleLoad:

if((RootPanel.get("someHomeWidget")!=null)&& 
  (RootPanel.get("someOtherHomeWidget")!=null)) 
{ 
  // do the stuff 
} 

من أجل المشرف Entrypoint لا ينبغي تنفيذها عند المنزل الصفحة مفتوحة و العكس.

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

هذا ينتن 1000 كم و من الخطأ الواضح:ما هو الصحيح طريقة للقيام بذلك في الناس التجربة ؟

أي مساعدة تقدير!

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

المحلول

الطريقة الصحيحة هي أن يكون نقطة دخول واحدة لكل وحدة ، بالعصي المناسبة الحاجيات المناسبة divs:

RootPanel panel = RootPanel.get("someHomeWidget");
if (panel) panel.add(new HomeWidget());

panel = RootPanel.get("adminWidget");
if (panel) panel.add(new AdminWidget());

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

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

نصائح أخرى

أردت أيضا أن استخدام صفحات متعددة في GWT لعبة التطبيق وأعتقد أنني اكتشفت ذلك.استغرق الأمر بعض تدليك نشر واصف (myApp.gwt.xml) ، ولكن هنا هو ما فعلته.

  • جعلت فئة أخرى تنفيذ EntryPoint و إضافة بعض التعليمات البرمجية التي تضاف إلى مجموعة div فقط في صفحة جديدة.
  • نسخها الأصلية gwt.xml وغيرت أمرين:
    • وحدة-إعادة تسمية-إلى - لقد غيرت "anothergwtapp"
    • نقطة الدخول المحددة فئة جديدة.
  • عند ترجمة المشروع, وهناك دليل آخر في "الحرب" مجلد يسمى (انتظر...) "anothergwtapp".أنه يتضمن "anothergwtapp.nocache.js" هذا هو GWT السحر.
  • أخيرا, أنا نسخ الاصلي صفحة HTML و استبدال "stockwatcher/stockwatcher.nocache.js" مع "anothergwtapp/anothergwtapp.nocache.js" (نعم ، أنا جديدة جدا - البرنامج التعليمي هو لا يزال على الجهاز الخاص بي)
    • لقد غيرت HTML جديدة تكون مختلفة قليلا (جديد divs الجديد دخول نقطة onload لملء) و أضفت بسيطة href إلى صفحة جديدة في الصفحة الأولى.

انها عملت.مجرد تكرار gwt.xml وتوفير اسما جديدا وحدة للذهاب جنبا إلى جنب مع التطبيق الجديد صفحة.نظرت إلى بعض الروابط الأخرى وأنا قد فعلت فعلا ما وصفت, ولكن كان هناك الكثير من الكلمات و الموجهات و هذه (أيأنا لم أقرأ أي شيء).أنا باستخدام أحدث GWT المساعد غاليليو ربما IJWs الآن.

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

إذا كنت ترغب في استخدام نقاط إلغاء مختلفة، فكل ما قيل في تعليق أعلاه، استخدم وحدات مختلفة.

من الأفضل عادة الحصول على نقطة إلغاء واحدة فقط. بداية نقاط متعددة في وحدة واحدة تبدأ كلها في نفس الوقت والتي يمكن أن تفعل الأشياء التي لا تتوقعها أحيانا.

لديك الكثير من الخيارات في كيفية التعامل معها بشكل منفصل: - لديك 2 مجموعات مختلفة واحدة للمشرف وواحد للتطبيق المنزل. - استخدم رموز التاريخ للإشارة إلى أن المسؤولين أو الصفحة الرئيسية - تحقق من متغير JS لإظهار واحد أو آخر - التحقق من وجود معرف DIG محدد لإظهار المسؤول أو الصفحة الرئيسية (rootpanel.get (ID)) - استخدم معلمات URL للإشارة إلى التطبيق. - ... إلخ

هناك طريقة بسيطة (صعبة) لتحقيق ذلك:

قم بإجراء فئة رئيسية نقطة الدخول الخاصة بك.

<module rename-to='gwt'>
  <inherits name='com.google.gwt.user.User'/>
  <entry-point class='com.example.client.Main'/>
  <source path='client'/>
  <source path='shared'/>
</module>;<br/>

إنشاء هذا Main.java للعمل مثل المرسل:

package com.example.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.RootPanel;

public class Main implements EntryPoint {

  public void onModuleLoad() {

    String url = Window.Location.getHref();
    if ( url.indexOf("?install")>-1 ) {
      Install install = Install.getInstance();
      RootPanel.get().add(install);      
    else if ( url.indexOf("?admin")>-1 ) {
      Admin admin = Admin.getInstance();
      RootPanel.get().add(admin);    
    } else {
      Application app = Application.getInstance();
      RootPanel.get().add(app);      
    }
  }
}

الآن تطبيق الطبقات المختلفة، المسؤول وتثبيت العمل مثل وحدات منفصلة.

هنا هو على سبيل المثال تثبيت بسيط:

package comexample.client;

import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HTML;

public class Install extends FlowPanel {

  /** Singleton stuff - to access Main from all subclasses! */
  private static Install singelton;
  public static Install getInstance() {
    if (singelton == null) {singelton = new Install();}
    return singelton;
  }

  /** Constructor - called by Main.onModuleLoad() */
  private Install() {
    this.add(new HTML("<h1>Do whatever You have to do!</h1>"));
  }
}

لا تحتاج إلى أشياء Singleton (GetInstance)، لكنها مفيدة للغاية في التطبيقات الكبيرة.

الآن في دليل / دليل - إنشاء دلائل تسمى Install and Admin وفي حد ذاته إنشاء صفحة HTML مثل هذا:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="refresh" content="0; URL=/index.html?install">
</head>
<body></body>
</html>

لذلك عندما يوجه المستخدم جدواه http://www.example.com/install. سيتم إعادة توجيهها إلى http://www.example.com/index؟install. و Index.html مرتبط ب main.java الذي سيرسل الطلب وتحميل install.java

لدي حل لهذا على مدونتي. يمكنك تنزيل نموذج مافن عينة يحتوي على نقاط إدخال متعددة ويستخدم كتابة عنوان URL. إلق نظرة: http://zenoconsulting.wikidot.com/blog:16.

هل جربت هذا الإطار بعد؟http://gwtmultipage.org/كلاوديوس

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