0

これは簡単なことだと思いましたが、基本的には、次のようなデータを含むオブジェクトの観測可能な配列があります。

{
   BasicType: "some-type",
   ExtendedType: "some-extended-type",
   DisplayType: "some-display-type"
}

データ フィールドは常にモデル内にあり、表示するデータがない場合は空の文字列になります。

現在、このモデルはシステム全体で使用されており、単純な POJO であり、ビュー モデルには、ビューで必要なときにこれらの多くが含まれています。したがって、「この」オブジェクトにビュー固有の懸念を置きたくありませんが、これらの小さなモデルの多くで構成されるビューモデルにそれらを置くことができます。

とにかく、ビューではすべてのフィールドが追加されますが、より適切なタイプが利用可能な場合は、それぞれに無効にする場合があります。したがって、例は次のようになります。

<div data-bind="text: BasicType, if: (BasicType && !ExtendedType && !DisplayType)"/>
<div data-bind="text: ExtendedType, if: (!BasicType && ExtendedType && !DisplayType)"/>
<div data-bind="text: DisplayType, if: (!BasicType && !ExtendedType && DisplayType)"/>

しかし、何らかの理由で期待どおりに動作しないため、!xTypefor を変更しようとしましたxType == ''が、そのような運もありませんでした。また、括弧を使用して評価を強制しましたが、何もしませんでした。それで、私は何かが欠けていますか、それとも複数の要素を処理しない場合、ノックアウトjsはできますか?

簡単な方法があれば、これらを計算されたオブザーバブルに変換できれば幸いですが、これらのモデルはページ間で、Web サービスとのコントラクトとして使用されるため (データ レイヤーのようなものです)、そうしたくありません。それらを変更し、計算された値をオブジェクトに追加する方法がわかりません。ただし、オブジェクトを取得するときに、計算されたオブザーバブルをそれぞれに追加してからそれを使用してループする場合を除きます。

とにかくそれがシナリオです、どんなアドバイスも素晴らしいでしょう!

4

1 に答える 1

1

モデルのプロパティが観測可能でない場合、コードは機能します。モデル プロパティがオブザーバブルである場合は、オブザーバブルを実行して、比較する前に値にアクセスする必要があります。

<div data-bind="foreach: types">
    <div data-bind="text: BasicType, if: (BasicType() && !ExtendedType() && !DisplayType())"></div>
    <div data-bind="text: ExtendedType, if: (!BasicType() && ExtendedType() && !DisplayType())"></div>
    <div data-bind="text: DisplayType, if: (!BasicType() && !ExtendedType() && DisplayType())"></div>
</div>

例を次に示します: http://jsfiddle.net/5WMVb/1/

于 2013-03-19T12:26:00.880 に答える