0

JGoodies バインディング API ( APIへのリンク) には、 commitOnFocusLost パラメータがあります。

commitOnFocusLost - フォーカスが失われたときにテキストの変更をコミットする場合は true、入力されたすべての文字のテキストの変更をコミットする場合は false

I want the behavior where there is no commit on focus lost and there is no commit while characters are being typed. I only want there to be a commit when I call Bindings.commitImmediatly(). Am I able to do that?

4

2 に答える 2

0

100%確実ではありませんが、できます。

コンポーネントを作成するには BasicComponentFactory を使用する必要があり、bool パラメータを指定せずに BasicComponentFactory.createTextField(ValueModel) を使用する必要があります。

次に、それに応じて保存するために、値モデルでセーフを呼び出す方法とタイミングを理解する必要があります。

于 2012-05-11T14:10:32.167 に答える
0

あなたはおそらく探しているBufferedValueModel

サブジェクトである別の ValueModel をラップし、サブジェクトの値の変更を遅らせる ValueModel。値が設定されるまで、サブジェクトの値を返します。トリガー チャネルが Boolean.TRUE に変わるまで、バッファリングされた値はサブジェクトに書き込まれません。

PresentationModel.getBufferedValue()それらを作成するのに便利です。


ただし、通常はバッファー モデルは避けます。これは、既にかなり複雑なアーキテクチャ モデルがさらに複雑になるためです。また、モデルの検証ではうまく機能しません。バインディングの自動コミット動作はそのままにし、それを中心にコードを構成することをお勧めします。

バッファリングに関する Karsten Lentzsch :

個人的には、ドメイン オブジェクト グラフをコピーしてバッファすることを好みます。多くのアプリケーションでは、クライアント上のドメイン オブジェクトはバックエンド ドメイン オブジェクトのコピーです。この場合、それ以上のバッファリングなしでクライアント ドメイン オブジェクトを操作できます。クライアント ドメイン オブジェクトに加えられたすべての変更をフラッシュするには、バックエンドからそれらをリロードするだけです。

いずれにせよ、プレゼンテーション モデル (PM) レイヤーでバッファが必要な場合は、PM で使用できるようにする必要があります。プレゼンテーション ロジックは、ドメインの状態ではなく、バッファリングされた状態で動作します。

Binding チュートリアルで例を見つけることができます。BufferedAlbumPresentationModel を参照してください。バッファリングされた「クラシック」プロパティの変更をリッスンして、バッファリングされた「composerEnabled」プロパティを更新する方法を示します。BufferedClassicalChangeHandler は、アルバムがクラシックでない場合に作曲家を null に設定する Album#setClassical に実装された動作をコピーすることに注意してください。

JGoodies ダウンロード アーカイブの古いパッケージにチュートリアルがあります。

于 2012-12-07T19:10:42.237 に答える