Javascript Knockoutjs foreach,带if内表

Javascript Knockoutjs foreach,带if内表,javascript,jquery,knockout.js,Javascript,Jquery,Knockout.js,我有一个foreach在我的一个页面中创建一个表。我的目标是,当他们选中复选框时,我将显示该表的其他元素 我的问题是当第一次绘制表格时,一切都按预期进行。但是,如果在绘制表之后选中复选框,则ko if语句不会重新计算。实现这一目标的最佳方法是什么?我现在的代码如下 <tbody data-bind="foreach: AvailableCerts"> <tr> <td> <label class="labe

我有一个foreach在我的一个页面中创建一个表。我的目标是,当他们选中复选框时,我将显示该表的其他元素

我的问题是当第一次绘制表格时,一切都按预期进行。但是,如果在绘制表之后选中复选框,则ko if语句不会重新计算。实现这一目标的最佳方法是什么?我现在的代码如下

<tbody data-bind="foreach: AvailableCerts">
    <tr>
        <td>
            <label class="label-checkbox inline">
                <input type="checkbox" data-bind="value: Id, checked: IsSelected">
                <span class="custom-checkbox"></span>
                <span data-bind="text:Name"></span>
            </label>

        </td>
        <td data-bind="text:CertifyingBody"></td>
        <td>
            <!-- ko if: (IsSelected) -->
            <input data-bind="value : EntryDate" required type="date" class="form-control input-sm">
            <!-- /ko -->
        </td>
        <td>
            <!-- ko if: ExitDateRequired -->
            <input data-bind="value : ExitDate" required type="date" class="form-control input-sm">
            <!-- /ko -->
        </td>
        <td>
            <!-- ko if: CaseNumberRequired -->
            <input data-bind="value : CaseNumber" required type="text" class="form-control input-sm">
            <!-- /ko -->
        </td>
    </tr>
</tbody>

默认情况下,ko.observableArray AvailableCerts的内容不可见。如果您计划在下载数据后使用该数据,则还需要使每个证书的数据可见。因此,在Ajax调用中类似这样的内容:

self.getAvailableCerts = function () {
  $.ajax({
      url: self.rootUrl + "AvailableCerts",
      type: "GET",
      cache: false,
      dataType: "json",
      success: function (results) {
          if (results != null) {
              for (var i = 0; i < results.length; i++) {
                self.AvailableCerts().push({
                    'IsSelected': ko.observable(results[i].IsSelected),
                    'ExitDateRequired': ko.observable(results[i].ExitDateRequired),
                    'CaseNumberRequired': ko.observable(results[i].CaseNumberRequired)
                });
              }
          } else {
              self.AvailableCerts([]);
          }
      }
  });
};
或者签出插件

self.getAvailableCerts = function () {
  $.ajax({
      url: self.rootUrl + "AvailableCerts",
      type: "GET",
      cache: false,
      dataType: "json",
      success: function (results) {
          if (results != null) {
              for (var i = 0; i < results.length; i++) {
                self.AvailableCerts().push({
                    'IsSelected': ko.observable(results[i].IsSelected),
                    'ExitDateRequired': ko.observable(results[i].ExitDateRequired),
                    'CaseNumberRequired': ko.observable(results[i].CaseNumberRequired)
                });
              }
          } else {
              self.AvailableCerts([]);
          }
      }
  });
};