Можно ли получить значение ui: field в коде Java в GWT? - PullRequest
1 голос
/ 22 ноября 2010

Это может звучать очень странно, но давайте начнем с примера:

<my:MagicWidget ui:field="someFieldName" fieldName="someFieldName"/>

Скорее всего, мы всегда хотим иметь одно и то же значение в ui: field и fieldName.Очевидно, что в этом коде есть некоторое дублирование, я бы хотел избежать его и сделать необязательным fieldName.

Итак, это то, что у меня есть в коде виджета:

@UiConstructor
public MagicWidget(String fieldName) {
    this.fieldName = fieldName;
}

Но я бы хотел, если возможно, позволить этому конструктору быть необязательным и предоставить конструктор по умолчанию, который бы"по волшебству" выясни, что это ui: значение поля:

@UiConstructor
public MagicWidget() {
    this.fieldName = /*some magic to get ui:field's value*/;
}

Мне было интересно, есть ли способ получить значение "ui: field" внутри моего MagickWidget?(Виджет расширяет Composite).Я боюсь, что это может быть невозможно, потому что в большинстве случаев это не очень полезно, но если у кого-то есть идея - не стесняйтесь поделиться!

PS: я использую GWT 2.1.0.RC1.

1 Ответ

1 голос
/ 23 ноября 2010

Как вы, возможно, знаете, поле ui: есть, поэтому вы можете взаимодействовать с UI Object в коде Java после того, как вы объявили его с помощью UiBinder. Так, например, если вы добавляете MagicWidget в шаблон UiBinder, вы можете написать

@UiField MagicWidget someWidget

для возможности программного взаимодействия с ним. Знание вашего магического виджета о названии ссылки, указывающей на него, может быть не таким уж полезным (или возможным), поскольку вы можете передавать ссылку на этот конкретный MagicWidget назад и вперед между различными частями вашего приложения. Один MagicWidget может легко иметь несколько ссылок с разными именами одновременно. Вот почему это трудно выбрать "по волшебству" во время выполнения. Я понимаю, что это не представляет большой проблемы, если вы хотите использовать это значение только при создании объекта, но имейте в виду, что вам не нужно включать поле ui: при добавлении виджета с использованием UiBinder.

Почему важно, чтобы виджет знал имя своего поля? Знание этого может облегчить предоставление предложений о других способах достижения того, что вы хотите сделать.

...