Как я могу удалить внедренный ресурс CSS в GWT?

Я хочу удалить введенный CSSResource в приложении GWT.

Я использовал следующий код MyClass.INSTANCE.ensureInjected();

Я хочу выше CSSResource только для конкретной страницы. Таким образом, остальные страницы должны работать в соответствии с фактической css/theme.

Как только я ввожу это, оно применимо ко всему приложению. Как я могу преодолеть это?

Помоги мне.

3 ответа

Решение

Вы можете ввести свой CSS-пакет, используя напрямую StyleInjector служебный класс, а не ensureInjected() метод

Тогда у вас будет ссылка на внедренный элемент, который вы можете удалить, когда захотите.

// Equivalent to MyClass.INSTANCE.ensureInjected()
StyleElement e  = StyleInjector.injectStylesheet(MyClass.INSTANCE.css().getText());


// Remove the injected css element
e.removeFromParent();

Теоретически вы можете попытаться удалить вставленный блок стилей из DOM, но это будет довольно сложно (и, возможно, не очень надежно).

Намного лучше организовать свою "специальную" таблицу стилей CSS другим способом:

Включите селекторы, как

.some {
  color: green;
}

.other {
  color: red;
}

в

.special .some {
  color: green;
}

.special .other {
  color: red;
}

а затем добавьте / удалите "специальный" класс, например, к / из вашего элемента body, чтобы активировать / деактивировать специальные стили.

Если вы встраивали одно и то же приложение GWT в более чем 1 страницу и хотите, чтобы в зависимости от данной страницы было другое поведение, вы можете, например, вызвать

MyClass.INSTANCE.ensureInjected();

если задан параметр начальной загрузки. На странице хоста установите этот параметр, например, YourGwtApp.nocahe.js? Css=inject, и прочитайте его, как описано здесь. В onLoadMethod вызовите ensureInjected в соответствии с вашим параметром начальной загрузки.

Другие вопросы по тегам