問題タブ [vaadin-flow]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
data-binding - SerializableFunction オブジェクトのペアを定義して、データ バインディング用の Converter を提供する
Vaadin 8 フレームワークと Vaadin 10 フローでは、データ バインディング機能により、ウィジェットの予期されるデータ型 ( aなど) とバッキング Bean プロパティのデータ型 (数値など)Converter
の間を仲介する を提供できます。String
TextField
Integer
この例では、組み込みのConverter
実装StringToIntegerConverter
が使用されています。
しかし、他の型に対して a を定義するのConverter
はどうでしょうか? 短くて甘い を簡単に定義するにはどうすればよいConverter
ですか? たとえば、文字列からUUIDへのコンバーターです。正規の 36 文字の 16 進文字列を に表示しTextField
、逆方向にその文字列を解析して UUID に戻します。
どちらもオブジェクトのペアを取るBinder.BindingBuilder
メソッドのペアを提供していることがわかります。withConverter
SerializableFunction
Binder.BindingBuilder::
withConverter
(SerializableFunction<TARGET,NEWTARGET> toModel, SerializableFunction<NEWTARGET,TARGET> toPresentation)
Binder.BindingBuilder::
withConverter
(SerializableFunction<TARGET,NEWTARGET> toModel, SerializableFunction<NEWTARGET,TARGET> toPresentation, String errorMessage)
➥ では、SerializableFunction
オブジェクト/クラスのペアをどのように定義すればよいでしょうか?
このインターフェースが既知のサブインターフェースをリストしていることに気付きました。それはおなじみのように見えますが、短い単純なコンバーターを簡単に定義するための鍵となる予感があります。しかし、ラムダを使用した構文と、ここで行われているすべてのことを完全には理解していません。ValueProvider
<SOURCE,TARGET>
を実装するクラスの書き方を尋ねているわけConverter
ではありません。上記SerializableFunction
のメソッドに箇条書き項目として渡す引数のペアをどのように記述するかを尋ねています。Binder.BindingBuilder::withConverter
そのJavaDocを引用:
Interface Binder.BindingBuilder<BEAN,TARGET>
…</p>
withConverter
default <NEWTARGET> Binder.BindingBuilder<BEAN,NEWTARGET> withConverter(SerializableFunction<TARGET,NEWTARGET> toModel, SerializableFunction<NEWTARGET,TARGET> toPresentation)
マッピング関数を使用してバインディングを別のデータ型にマップし、エラー メッセージとして例外を示します。
マッピング関数は、バインディングの現在のターゲット データ型と一致する必要があるプレゼンテーション型と、任意のデータ型でバインディングの新しいターゲット型になるモデル型との間の変換に使用されます。を呼び出す場合
bind(ValueProvider, Setter)
、バインディングのターゲット タイプはゲッター/セッター タイプと一致する必要があります。たとえば、次のような適切な関数を使用して、TextField を整数型のプロパティにバインドできます。
withConverter(Integer::valueOf, String::valueOf);
型パラメータ:
NEWTARGET
- 変換する型パラメーター:
toModel
- 古いターゲット タイプから新しいターゲット タイプに変換できる関数
toPresentation
- 新しいターゲット タイプから古いターゲット タイプに変換できる関数戻り値:
適切なタイプの新しいバインディング
スロー:
IllegalStateException
- bind がすでに呼び出されている場合