Определите, работает ли GWT (2.8.x) с SDM в режиме разработки [дубликат]

Это одно из мест, с помощью которого привязка данных, используемая во многих новых фреймворках JavaScript, будет очень полезна для вас ...

Итак, если вы используете Angular, React или любые другие фреймворки, которые делают два способа связывания данных, эта проблема просто исправлена ​​для вас, поэтому простым языком ваш результат undefined на первом этапе, поэтому вы получили result = undefined до получения данных, а затем, как только вы получите результат , он будет обновляться и присваиваться новому значению, которое отвечает на ваш вызов Ajax ...

Но как вы можете сделать это в чистом javascript или jQuery, например, как вы задали этот вопрос?

Вы можете использовать обратный вызов, обещание и недавно наблюдаемое, чтобы обрабатывать его для вас, например, в обещаниях мы имеем некоторые функции, такие как success () или then (), которые будут выполняться, когда ваши данные будут готовы для вас, с функцией обратного вызова или подписки на наблюдаемые.

Например, в вашем случае, в котором вы используете jQuery, вы можете сделать что-то вроде этого:

$(document).ready(function(){
    function foo() {
        $.ajax({url: "api/data", success: function(data){
            fooDone(data); //after we have data, we pass it to fooDone
        }});
    };

    function fooDone(data) {
        console.log(data); //fooDone has the data and console.log it
    };

    foo(); //call happens here
});

Для получения дополнительной информации n изучение обещаний и наблюдаемых, которые являются новыми способами для создания асинхронных материалов.

3
задан Markus A. 13 November 2014 в 20:42
поделиться

8 ответов

Существует проблема с открытым доступом о наличии общего доступа, например GWT.isProdMode().

В то же время, если вы действительно должны знать, есть свойство отложенного связывания с именем superdevmode, которое вы можете использовать в своих правилах <replace-with> или <generate-with>.

3
ответ дан Thomas Broyer 26 August 2018 в 17:24
поделиться

Как уже упоминалось, есть свойство superdevmode, которое вы можете использовать.

Вот пример реальной жизни:

  1. Создайте класс, содержащий метод, который говорит, что мы не находимся в SuperDevMode:
    public class SuperDevModeIndicator {
        public boolean isSuperDevMode() {
            return false;
        }
    }
    
  2. Расширьте предыдущий класс и переопределите метод, чтобы сообщить, что мы находимся в SuperDevMode:
    public class SuperDevModeIndicatorTrue extends SuperDevModeIndicator {
        @Override
        public boolean isSuperDevMode() {
            return true;
        }
    }
    
  3. Используйте только один подходящий класс в зависимости от свойства superdevmode - используйте отложенную привязку - поместите это в свой *.gwt.xml :
    <!-- deferred binding for Super Dev Mode indicator -->
    <replace-with class="com.adam.project.client.SuperDevModeIndicatorTrue">
      <when-type-is class="com.adam.project.client.SuperDevModeIndicator"/>
      <when-property-is name="superdevmode" value="on" />
    </replace-with>
    
  4. Создавать класс SuperDevModeIndicator по отложенному привязке:
    SuperDevModeIndicator superDevModeIndicator = GWT.create(SuperDevModeIndicator.class);
    
  5. Использовать его, чтобы проверить, находитесь ли вы в SuperDevMode или нет:
    superDevModeIndicator.isSuperDevMode();
    

Voila!

Здесь вы найдете документацию по Отложенное связывание .

5
ответ дан Adam 26 August 2018 в 17:24
поделиться

Возможно, существует «официальный» способ, но это должно работать:

Storage stockStore = Storage.getSessionStorageIfSupported();
if (stockStore != null)
{
    boolean isSuperDevMode = stockStore.getItem("__gwtDevModeHook:" + GWT.getModuleName()) != null);
}
2
ответ дан JPelletier 26 August 2018 в 17:24
поделиться

Я использовал следующий метод:

private static native boolean isSuperDevMode()/*-{ return typeof $wnd.__gwt_sdm !== 'undefined'; }-*/;

Работает в GWT 2.7.0.

0
ответ дан MeTTeO 26 August 2018 в 17:24
поделиться

Могу ли я предложить:

public boolean isSuperDevMode()
{
    return Window.Location.getPort().equals("8888");
}
-1
ответ дан Moronicus 26 August 2018 в 17:24
поделиться

Мое решение:

GWT.getModuleBaseForStaticFiles().contains("9876")
0
ответ дан sheilak 26 August 2018 в 17:24
поделиться

Вы можете использовать метод GWTHelper.isSuperDevMode (), реализованный ниже.

public final class GWTHelper {

    public static boolean isSuperDevMode() {
        final Storage storage = Storage.getSessionStorageIfSupported();
        if (storage == null) {
            return false;
        }
        final String devModeKey = "__gwtDevModeHook:" + GWT.getModuleName();
        return storage.getItem(devModeKey) != null;
    }

}

Источник: https://gwt.googlesource.com/gwt/+/master/dev/core/ SRC / COM / Google / GWT / ядро ​​/ линкер / DevModeRedirectHook.js

0
ответ дан STB Land 26 August 2018 в 17:24
поделиться

Чтобы проверить сервер dev-приложения: GWT.getHostPageBaseURL () возвращает http://127.0.0.1:8888/

Серверная сторона: request.getRemoteHost () должен возвращать (хотя я не тестировал это).

Чтобы проверить режим Super Dev (vs dev app server без SDM): Если GWT.getModuleBaseURL () & amp; GWT.getModuleBaseForStaticFiles () отличаются, вы находитесь в режиме Super Dev.

имя свойства = "superdevmode" решение не сработало для меня.

0
ответ дан timmacp 26 August 2018 в 17:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: