Как я могу передать стандарт, статическую переменную от всех представлений в Django?

Задача

Невозможно добавить одно и то же Label несколько раз в граф сцены. Это задокументировано в Node ( emphasis mine):

Узел может встречаться не более одного раза в любом месте графа сцены. В частности, узел должен появляться не более одного раза во всех следующих случаях: в качестве корневого узла в Scene, дочерних ObservableList в Parent или в качестве фрагмента Node.

Граф сцены не должен иметь циклов. Цикл будет существовать, если узел является предком самого себя в дереве, учитывая Group содержимое ObservableList, Parent children ObservableList и Node отношений клипа, упомянутых выше.

Если программа добавляет дочерний узел к Parent (включая Group, Region и т. Д.), И этот узел уже является дочерним по отношению к другому Parent или корню Scene ], узел автоматически (и без вывода сообщений) удаляется из своего прежнего родителя. Если программа пытается изменить граф сцены любым другим способом, который нарушает вышеуказанные правила, возникает исключение, попытка модификации игнорируется, и граф сцены восстанавливается в своем предыдущем состоянии.

blockquote>

Выделенная часть объясняет, почему Label появляется только один раз при использовании .

Решение

Единственное решение вашей проблемы - дублирование Label. Для этого можно использовать как минимум два варианта.

Используйте

Один из способов сделать это, используя ( выделение шахта):

Элемент создает копию существующего элемента. Как и , он используется с атрибутом fx:id или переменной сценария. Атрибут «source» элемента указывает имя объекта, который будет скопирован. Тип источника должен определять конструктор копирования, который будет использоваться для создания копии из исходного значения.

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

blockquote>

Как указано в документации, использование требует, чтобы класс имел конструктор копирования. В документации также говорится, что ни один из основных классов JavaFX не предоставляет конструкторы копирования. Это означает, что вам придется создать подкласс Label и предоставить необходимый конструктор, как показано в ответе funkyjelly . Чтобы обеспечить актуальность свойств, вы можете связать свойства внутри конструктора:

public class CopyableLabel extends Label {

  public CopyableLabel(CopyableLabel label) {
    // You only mentioned the text, tooltip, and style properties
    // in your question. Bind more properties as needed.
    textProperty().bind(label.textProperty());
    tooltipProperty().bind(label.tooltipProperty());
    styleProperty().bind(label.styleProperty());
  }

}

Таким образом, вам нужно только ввести «master» Label, и любые обновления к нему будут распространяться на все копии. Используя этот дизайн, вы должны иметь в виду, что связанные свойства не могут быть установлены напрямую; попытка установить связанное свойство приведет к исключениям. Возможно, вы захотите задокументировать, что конструктор будет связывать свойства, а не просто копировать значения.

Использовать привязки выражений

Другой вариант - связать необходимые свойства в файле FXML. Вы все равно будете создавать несколько Label с, но вам нужно будет только ввести «master» Label, как и раньше.



  

Здесь используются возможности привязки выражений JavaFX FXML. Эта опция может загромождать файл FXML, но не требует создания подкласса Label.

11
задан mipadi 23 February 2009 в 01:09
поделиться

4 ответа

Существует несколько возможных решений Вашей проблемы.

Если Вы действительно хотите иметь это на каждой странице на Вашем сайте, процессор контекста является, вероятно, Вашим лучшим выбором. Процессоры контекста являются основным способом ввести данные во все шаблонные контексты. Знайте однако, что процессор контекста назовут по каждому запросу.

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

С любым решением необходимо также посмотреть на платформу кэша Django. Платформа кэша делает довольно легким временно сохранить Ваши расчетные значения некоторое время для сохранения некоторой работы над каждым запросом.

17
ответ дан 3 December 2019 в 05:36
поделиться

Комбинация пользовательских тегов шаблона, как упомянуто ранее и шаблонного кэширования фрагмента должна добиться цели.

0
ответ дан 3 December 2019 в 05:36
поделиться

Шаблонное наследование Django должно покрыть это. Вы могли создать основной шаблон, который обрабатывает Вашу функциональность боковой панели. Ваши другие представления расширяют этот шаблон.

Шаблонное наследование: http://www.djangobook.com/en/1.0/chapter04/#s-template-inheritance

0
ответ дан 3 December 2019 в 05:36
поделиться
Другие вопросы по тегам:

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