【发布时间】:2015-01-25 20:44:06
【问题描述】:
假设我们有一个 N+1 个元素的可观察数组。我想要实现的是使用来自这些元素的按钮构建 3 x X 网格。比如手机键盘之类的。
到目前为止,我所做的是创建了一个带有 foreach 的表,如果在其中:
<table>
<tbody data-bind="foreach: tableList">
<!-- ko if: isEof($index()) -->
<tr>
<!-- /ko -->
<td><button data-bind="text: name"></button></td>
<!-- ko if: isEof($index()) -->
</tr>
<!-- /ko -->
</tbody>
</table>
isEof() 函数应该通过列表索引确定我们是否已经渲染了 3 个元素。如果是,那么它将呈现标签。此外,如果 index 为 0,那么它也会渲染元素。 这是函数的代码:
function TableItem(data){
this.id=ko.observable(data.id);
this.name=ko.observable(data.name);
this.isEof = function(index){
if(index ==0){
return true;
}else{
if((index+3) % 3 === 0){
return true;
}else{
return false;
}
}
}
}
但是这个设置我面临两个问题。
1) 启用这些 if 块后,按钮名称绑定不起作用。当我删除 ko if 块时,它将正确呈现。
2) ko if 语句似乎无法正常工作。它只会渲染出那些也允许渲染的行。
我已经制作了我的解决方案的 JSFiddle 示例:http://jsfiddle.net/kpihus/3Lw7xjae/2/
【问题讨论】:
-
好的,我已经注意到我的问题了。例如,当我有第三个元素时,我将为同一个
元素渲染 和 ,因此其他单元格不在和 之间。虽然我还不确定,如何解决这个问题。 -
kpilhus您可以查看现在发布的答案。干杯