1

这听起来可能很奇怪,但让我们从一个例子开始:

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

可以肯定的是,我们总是希望在 ui:field 和 fieldName 中具有相同的值。显然这段代码中有一些重复,我想避免它并使 fieldName 可选。

所以,这就是我在小部件代码中的内容:

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

但我想,如果可能的话,允许这个构造函数是可选的,并提供一个默认构造函数,它会“通过魔法”找出它的 ui:field 值:

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

我想知道是否有办法在我的 MagickWidget 中获取“ui:field”的值?(小部件扩展了 Composite)。我担心这可能是不可能的,因为大多数时候它不是那么有用,但如果有人有想法 - 请随时分享!

PS:我使用的是 GWT 2.1.0.RC1。

4

1 回答 1

1

您可能知道,ui:field 在那里,因此您可以在使用 UiBinder 声明 UI 对象后与 Java 代码中的 UI 对象进行交互。因此,例如,如果您在 UiBinder 模板中添加一个 MagicWidget,您可以编写

@UiField MagicWidget someWidget

为了能够以编程方式与之交互。让您的魔术小部件知道指向它的引用的名称可能不是那么有帮助(或可能),因为您可以在应用程序的不同部分之间来回传递对该特定 MagicWidget 的引用。单个 MagicWidget 可以很容易地同时拥有多个不同名称的引用。这就是为什么在运行时很难“通过魔法”挑选出来的原因。我意识到如果您只在构造对象时需要此值,这不是什么大问题,但请记住,当您使用 UiBinder 添加小部件时,您不需要包含 ui:field。

为什么 Widget 知道其字段名称很重要?知道这一点可能会更容易提供有关其他方法来完成您想要做的事情的建议。

于 2010-11-23T02:39:33.687 回答