0

KnockoutJS でプロパティ依存の作成/編集ビューを作成できません。

ここに問題があります。私が作成するものはすべて、ある種の「人」です。それは、医療専門家、配管工、機械工、またはエンジニアである可能性があります。その人がどのような人かによって、異なるデータを入力する必要があります。

ここに例があります:

Healthcare Professional: Name, Telephone, Hospital, etc.
Plumber: Name, Telephone, Crafts, etc.
Engineer: Name, Telephone, Specialities, etc.

ができることは、ViewModel に「showCity」、「showHospital」などのプロパティを作成して、個々のフォーム フィールドを非表示にすることです。

ただし、分離のために、まったく異なるフォームを使用したいと思います。条件が満たされた場合にのみ表示されるように、それぞれのフォームを設定することもできます。

ただし、使用する必要があるそれぞれのフォームのみを KnockoutJS にレンダリングさせたいと思います (Person のタイプは、最初に作成されたときに常に決定されます。変更することはできません)。

私が最終的にやらないのは、表示される 1 つのフォームと、そこにある (そしてデータにバインドされている) が隠されている 10 のフォームを持つことです。

「if」バインディングを次のように使用しようとしました<div data-bind="with: $root.selectedPerson"><form data-bind="if: $data.type='mathematician'"></form></div>が、役に立ちませんでした。

この場合のベストプラクティスが何であるかを知っている人はいますか?

4

1 に答える 1

0

あなたのifバインディングは、$data.type値を比較するのではなく、値を設定しています。試す:

<div data-bind="with: $root.selectedPerson"><form data-bind="if: $data.type() === 'mathematician'"></form></div>

これは問題ありませんが、私は常にデータ バインディング マークアップ内のコードを避けるようにしています。比較の結果の真/偽を返す計算を作成しようとしますが、あなたの状況では、人のタイプごとに1つ必要であり、それはトリッキーになります. そのために、私はテンプレートに目を向けます。あなたがすることができます:

<div data-bind="template: { name: $root.selectedPerson().type, data: $root.selectedPerson }"></div>
<script type="text/html" id="mathematician">...</script>
<script type="text/html" id="plumber">...</script>

*注意: KO バージョン 2.3.0 以降、バインディングのnameプロパティはオブザーバブルを受け入れることができます。template以前のバージョンを使用している場合は、必ずバインディングでオブザーバブルを呼び出してください。name: $root.selectedPerson().type()

于 2013-09-10T14:53:31.817 に答える