Javascript 如何使用Knockout.js绑定数组中的子数组?

Javascript 如何使用Knockout.js绑定数组中的子数组?,javascript,knockout.js,Javascript,Knockout.js,我使用Knockout将数据绑定到表: 我有obj: obj=[{id:"1",productName:"laptop",tag:[promotion,blackfriday]},{id:"2",productName:"Samsung galaxy note III",tag:[samsung,galaxy]}] HTML: <table data-bind="foreach:list" id="listProduct"> <tr> <td da

我使用Knockout将数据绑定到表:

我有obj:

obj=[{id:"1",productName:"laptop",tag:[promotion,blackfriday]},{id:"2",productName:"Samsung galaxy note III",tag:[samsung,galaxy]}]
HTML:

<table data-bind="foreach:list" id="listProduct">
  <tr>
      <td data-bind="text:productName"></td>
      <td data-bind="foreach:obj.tag">
          <p data-bind="text:tag"></p>
      </td>
  </tr>
</table>
但它只显示产品名称,不绑定“标签”obj;我希望Knockout将数据绑定为:

    Product Name                        Tag
1   Laptop                              promotion
                                        blackfriday

2   Samsung galaxy note III             samsung
                                        galaxy

根据您提供的代码,有两件简单的事情可以帮您解决这个问题:

  • productName
    拼写错误
  • foreach:obj.tag
    应该是
    foreach:tag
  • text:tag
    应该是
    text:$data
    (请参阅)
  • 给定数据中的标记不是字符串,因此如果没有在其他地方定义它们,它将不起作用
  • JS:

    HTML:

    
    测试
    

    测试

  • 您使用的实现太奇怪,我认为不正确。例如,我不知道为什么要检索
    listProduct
    元素并将其作为参数发送到
    ko.applyBidning
    ,这不是敲除的工作方式

  • 在foreach绑定中使用inside对象也有错误,请查看正确的用法。甚至您的HTML中也有一个拼写错误的
    productName

  • 在两个
    标记
    数组中都有语法错误,值是字符串,因此需要为每个元素添加引号

  • 我将展示一种更好、更干净的方法来解决上述问题:

    JS

    function VM(){ //declare your VM constructor.
      this.list = ko.observableArray([
          {id: '1', productName: 'laptop', tag: ['promotion', 'blackfriday']},
          {id: '2', productName: 'Samsung galaxy note III', tag: ['samsung', 'galaxy']}
        ]); //Add and observable array an set your data. If you don't need that this array be an observable just use a normal JS array.
    }
    
    ko.applyBindings(new VM()); //apply binding
    
    HTML

    <table data-bind="foreach: list">
    <tr>
        <td data-bind="text: productName"></td>
        <td data-bind="foreach: tag">
          <p data-bind="text: $data"></p>
        </td>
    </tr>
    </table>
    
    
    

    看看这个,看看它的工作

    <table  id="listProduct">
      <tr data-bind="foreach:list">
        <td data-bind="text:productName">test</td>
        <td data-bind="foreach:tag">
          <p data-bind="text:$data">test</p>
        </td>
      </tr>
    </table>
    
    function VM(){ //declare your VM constructor.
      this.list = ko.observableArray([
          {id: '1', productName: 'laptop', tag: ['promotion', 'blackfriday']},
          {id: '2', productName: 'Samsung galaxy note III', tag: ['samsung', 'galaxy']}
        ]); //Add and observable array an set your data. If you don't need that this array be an observable just use a normal JS array.
    }
    
    ko.applyBindings(new VM()); //apply binding
    
    <table data-bind="foreach: list">
    <tr>
        <td data-bind="text: productName"></td>
        <td data-bind="foreach: tag">
          <p data-bind="text: $data"></p>
        </td>
    </tr>
    </table>