在敲除模板中迭代 2 个数组

Iterate 2 arrays in knockout template

在视图模型中,我有 2 个数组。说 arr1 和 arr2。我想在 html 模板中相应地迭代数组和渲染视图。

例如我想在 html.

中编写等效于以下 js 代码
for(var i = 0; i< arr1.length; i++){
 for(var j=0;j<arr2.length;j++){
   if(arr1[i] == 'x' && arr2[j] == 'y'){
     //render input field
   }
   if(arr1[i] == 'w' && arr2[j] == 'z'){
     //render checkbox
   }
 }
}

我想在下面达到同样的效果 html。

<div data-bind="foreach : arr1">
 <!-- ko foreach: arr2 -->

// conditions to be added here for rendering input field or checkbox
 <!-- /ko -->
</div>

如何给出在 html 中比较 arr1 和 arr2 值的条件,就像在 javascript 中所做的那样?

我认为你正在尝试这样做:

<div data-bind="foreach: { data: arr1, as: 'a' }">
  <!-- ko foreach: { data: $parent.arr2, as: 'b' } -->
    // You should be able to reference 'a' and 'b' here
  <!-- /ko -->
</div>

第一个foreach

的范围外需要引用$parent.

您可以在 knockoutjs 上使用 [if 绑定][1] 来获得与您的 javascript样本。

我创建了一个示例来说明如何使用嵌套的 *foreach 绑定和 if 绑定

JS

var vm = {  
    array1 : ko.observableArray(['x', 'y', 'z']), 
    array2: ko.observableArray([1,2,3]) 
}; 
ko.applyBindings(vm);

HTML

<div data-bind="foreach: { data: array1, as: 'arr1' }">
  <!-- ko foreach: { data: $root.array2, as: 'arr2' } -->
    <label data-bind="text: arr1"></label>
    <div data-bind="if: arr2  == 1">
      <input type="text" data-bind="value: arr2" />
    </div>
    <div data-bind="if: arr2  == 2">
      <input type="checkbox" />
    </div>
    <div data-bind="if: arr2  == 3">
      <select></select>
    </div>    
  <!-- /ko -->
</div>

这里的工作示例:https://jsfiddle.net/6evL0n2c/3/