Foreach内有foreach,两张桌子,Knockout.js

时间:2016-07-30 06:12:50

标签: javascript knockout.js

情况如下。我有两张桌子:

MSSQL

产品

ProductId | ProductName
__________|____________
       1  | iPhone5
       2  | iPhone6
       3  | iPhone6s

图片

Id |    ImagePath     | ProductId
___|__________________|___________
1  | /images/231.jpg  |    2
2  | /images/432.jpg  |    2
3  | /images/111.jpg  |    1 

我的淘汰赛:

<div data-bind="foreach: Products">
   <div data-bind="text: ProductName"> 
      <div data-bind="foreach: Images>
         <img data-bind="attr:{src: ImagePath}" />  
      </div>
   </div>        
</div>

所以我想获得每个产品的所有图像。我应该将两个表合并为一个Json,如何从外循环获取id?谢谢!

P.S。如果它有用,我正在使用asp.net。

2 个答案:

答案 0 :(得分:1)

您可以使用$parent访问一个范围级别。因此,从您的内部循环中,您可以使用父级访问Products

中循环的当前项目

答案 1 :(得分:1)

您可以尝试以下内容。根据以下代码段,我认为products将来自ajax调用。话虽如此,你必须相应地改变这一部分。从本质上讲,你的ajax调用将返回的是一系列产品,每个产品至少应该有一个名称和一个图像数组(如果该产品不存在任何图像,则为空数组)。显然,您可以将任何其他信息添加到您的回复中。因此,您必须稍微调整下面声明的函数ImageProduct

&#13;
&#13;
var Image = function(name){
  this.name = name;
};

var Product = function(name, images){
  this.name = name;
  this.images = images;
};

var viewModel = {
   products: [
     new Product("iPhone5", [new Image("/images/111.jpg")]),
     new Product("iPhone6", [new Image("/images/231.jpg"),new Image("/images/432.jpg")]),
     new Product("iPhone6s", [new Image("/images/444.jpg")])
   ]
};

ko.applyBindings(viewModel);
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>

<div data-bind="foreach: products">
   <div data-bind="text: name"> </div>  
      <ul data-bind="foreach: images">
         <li data-bind="text: name"></li>  
      </ul>   
</div>
&#13;
&#13;
&#13;