【问题标题】:Update the template on the change of a select from within the parsed template在已解析的模板中更改选择时更新模板
【发布时间】:2013-02-20 18:41:45
【问题描述】:

我有一个 Observable 数组,使用映射插件我在其上映射来自服务器的 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,我不知道它的全部功能。

【问题讨论】:

    标签: knockout.js ko.observablearray


    【解决方案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);
        });
    

    【讨论】:

    • 是的,但是:“你可以在 2 天内接受你自己的答案”,因为我试图 :)
    • 啊,是的,我忘记了,抱歉!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多