0

Observable Array があり、マッピング プラグインを使用して、サーバーからの json をマップします。json 構造は次のようになります。

Data: [{
  NumberOfRooms: 5,
  Category: 1 
  },
  {
  TruckDoorsNo: 5,
  Category: 2
  }]

このjsonには、さまざまなタイプのオブジェクトに関するデータが含まれており、カテゴリ値から、テンプレートに表示するものと表示しないものを決定します。

<div data-bind="foreach: Buildings"> 
<!-- ko if: Category === 1 -->
  <input type="text" data-bind="value: NumberOfRooms" />
  <select data-bind="value: Category">
      <option value="1">Category1</option>
      <option value="2">Category2</option>
  </select>
<!-- /ko -->
<!-- ko if: Category === 2 -->
  <input type="text" data-bind="value: TruckDoorsNo" />
  <select data-bind="value: Category">
      <option value="1">Category1</option>
      <option value="2">Category2</option>
  </select>
<!-- /ko -->
</div>

問題は、各項目のカテゴリが解析されたテンプレート内から変更される可能性があり、この変更が発生したときにテンプレートを更新する必要があることです。

このViewModelのノックアウトモデルがなく、サーバーから直接jsonをマッピングしています。

これを達成する方法は?カテゴリ プロパティを監視可能にしようとしましたが、これは何もしていません。

私は Knockout を使い始めたばかりで、それがフルパワーであることを認識していないことを付け加えなければなりません。

4

1 に答える 1

1

そもそもテンプレートが間違っているという答えが見つかりました:

それ以外の:

<!-- ko if: Category === 2 -->
<!-- /ko -->

正しい方法は次のとおりです。

<!-- ko if: Category() == 2 -->
<!-- /ko -->

次のように、Category プロパティを監視可能にしました。

ko.utils.arrayForEach(viewModelBuilding.Buildings(), function(item)
    {
        item.Category = ko.observable(item.Category);
    });
于 2013-02-20T10:41:45.470 に答える