在解析模板中更改选择时更新模板

时间:2013-02-20 10:06:16

标签: knockout.js ko.observablearray

我有一个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而且我不知道它的全部功能。

1 个答案:

答案 0 :(得分:1)

我首先找到了我的模板错误的答案:

而不是:

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

正确的方法是:

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

我将Category属性设为observable,如下所示:

ko.utils.arrayForEach(viewModelBuilding.Buildings(), function(item)
    {
        item.Category = ko.observable(item.Category);
    });