0

クライアント側のフォーム操作APIの内部でknockout.jsを使用しています。これは、タブ、フィールドセット(タブに含まれる)、および個々のフォームコントロール(フィールドセットに含まれる)で構成される「階層」フォームを操作するように設計されています。

私の戦略は、これらのコンポーネントごとに個別のビューモデルを作成することです。私の質問は、モデルの状態を階層の「下向き」にどのように最適に伝播できるかということです。(たとえば、タブがプログラムで無効になっている場合、含まれているすべてのフィールドセットとそのフォームコントロールも無効にします)

私は最初のアプローチをスケッチするためにjsfiddleを準備しました:

http://jsfiddle.net/fbuchinger/bxNKg/4/

dom側では、これまでのところすべてが正常に見えますが、グループの「編集可能」状態がフォームコントロールのモデルに下向きに伝播されていないことに気付きました(PRENAME.editableプロパティはまだtrue、あるべきですがfalse)。より良いアプローチはありますか?

4

1 に答える 1

2

うまくいく可能性のあるいくつかのアプローチを次に示します。

  1. グループが管理する必要のあるコントロールをグループコンストラクターに渡します。次に、編集可能な監視可能なグループへのサブスクリプションを設定して、それを子に伝播します。サンプルは次のとおりです:http://jsfiddle.net/rniemeyer/ryKpS/

  2. グループを各コントロールのコンストラクターに渡し、グループの編集可能なオブザーバブルに対してサブスクライブし、この子の編集可能なオブザーバブルを更新します(子が親について明示的に知る必要がない場合は、これよりも#1をお勧めします)。サンプル: http: //jsfiddle.net/rniemeyer/qRCq4/

  3. pub/subを使用して値を同期します。ここに拡張機能の小さなライブラリがあります:https ://github.com/rniemeyer/knockout-postbox 。編集可能なプロパティが変更されたときにグループにメッセージを公開させてから、子にそのトピックをサブスクライブさせることができます。そうすれば、親と子はお互いを直接参照する必要がありません。おそらく、トピックを検討して、グループIDなどを組み込んで一意にする必要があるかどうかを確認する必要があります。こちらのサンプル:http://jsfiddle.net/rniemeyer/HC2jx/

于 2012-07-25T13:44:42.883 に答える