これは簡単なことだと思いましたが、基本的には、次のようなデータを含むオブジェクトの観測可能な配列があります。
{
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)"/>
しかし、何らかの理由で期待どおりに動作しないため、!xType
for を変更しようとしましたxType == ''
が、そのような運もありませんでした。また、括弧を使用して評価を強制しましたが、何もしませんでした。それで、私は何かが欠けていますか、それとも複数の要素を処理しない場合、ノックアウトjsはできますか?
簡単な方法があれば、これらを計算されたオブザーバブルに変換できれば幸いですが、これらのモデルはページ間で、Web サービスとのコントラクトとして使用されるため (データ レイヤーのようなものです)、そうしたくありません。それらを変更し、計算された値をオブジェクトに追加する方法がわかりません。ただし、オブジェクトを取得するときに、計算されたオブザーバブルをそれぞれに追加してからそれを使用してループする場合を除きます。
とにかくそれがシナリオです、どんなアドバイスも素晴らしいでしょう!