またはSupply
のいずれかになるオブジェクト があります(関連する質問を参照)。ElecSupply
GasSupply
どのサブクラスが編集されているかに関係なく、それらはすべて のリストを持っていますBillingPeriod
。
私は今BillingPeriodEditor
、そのリストの内容に基づいて N 個の をインスタンス化する必要があり、どうすればよいのかかなり困惑しています。
私はGWTPを使用しています。SupplyEditor
ここに私がちょうど働いているのコードがあります:
public class SupplyEditor extends Composite implements ValueAwareEditor<Supply>
{
private static SupplyEditorUiBinder uiBinder = GWT.create(SupplyEditorUiBinder.class);
interface SupplyEditorUiBinder extends UiBinder<Widget, SupplyEditor>
{
}
@Ignore
final ElecSupplyEditor elecSupplyEditor = new ElecSupplyEditor();
@Path("")
final AbstractSubTypeEditor<Supply, ElecSupply, ElecSupplyEditor> elecSupplyEditorWrapper = new AbstractSubTypeEditor<Supply, ElecSupply, ElecSupplyEditor>(
elecSupplyEditor)
{
@Override
public void setValue(final Supply value)
{
setValue(value, value instanceof ElecSupply);
if(!(value instanceof ElecSupply))
{
showGasFields();
}
else
{
showElecFields();
}
}
};
@Ignore
final GasSupplyEditor gasSupplyEditor = new GasSupplyEditor();
@Path("")
final AbstractSubTypeEditor<Supply, GasSupply, GasSupplyEditor> gasSupplyEditorWrapper = new AbstractSubTypeEditor<Supply, GasSupply, GasSupplyEditor>(
gasSupplyEditor)
{
@Override
public void setValue(final Supply value)
{
setValue(value, value instanceof GasSupply);
if(!(value instanceof GasSupply))
{
showElecFields();
}
else
{
showGasFields();
}
}
};
@UiField
Panel elecPanel, gasPanel, unitSection;
public SupplyEditor()
{
initWidget(uiBinder.createAndBindUi(this));
gasPanel.add(gasSupplyEditor);
elecPanel.add(elecSupplyEditor);
}
// functions to show and hide depending on which type...
@Override
public void setValue(Supply value)
{
if(value instanceof ElecSupply)
{
showElecFields();
}
else if(value instanceof GasSupply)
{
showGasFields();
}
else
{
showNeither();
}
}
}
さて、BillingPeriods のリストはサプライの一部であるため、これのロジックは SupplyEditor にあるはずです。
How to access PresenterWidget fields when added dynamicというスレッドで本当に良い助けを得ましたが、それはエディター フレームワークをまったく実装する前のことなので、ロジックが間違った場所にあると思います。
どんな助けでも大歓迎です。より多くのコード (Presenter と View) を投稿できますが、読みにくくしたくなかったので、データストアから Supply を取得し、View で edit() を呼び出すだけです。
ListEditor の例をいくつか見てきましたが、よくわかりません!