2013-06-03 45 views
3

我知道我可以在注释中使用注释foreach来为列表添加条件。但是,如果的observableArray为空,我想向表添加默认行。显示默认行KnockOut.js

目前,我做这样的事情:

<table> 
    <!-- ko foreach: members --> 
    <tr> 
     <td data-bind="text: Id"></td> 
     <td data-bind="text: FirstName"></td> 
     <td data-bind="text: LastName"></td> 
    </tr> 
    <!-- /ko --> 
    <tr data-bind="if: MemberCount == 0"> 
     <td colspan="3"> 
      No members have been added yet 
     </td> 
    </tr> 
</table> 

是否有一个更优雅的方式?

+1

看起来不错,我就躲在MEMBERCOUNT == 0作为IsEmpty属性。请记住,你不能在foreach内做条件这是一个好方法。 – 0lukasz0

回答

4

我同意0lukasz0注释,会做视图模型计算性能:

model.hasNoMembers = ko.computed(function(){ 
    return model.members().length === 0; 
    }); 

HTML:

<table> 
    <!-- ko foreach: members --> 
    <tr> 
     <td data-bind="text: Id"></td> 
     <td data-bind="text: FirstName"></td> 
     <td data-bind="text: LastName"></td> 
    </tr> 
    <!-- /ko --> 
    <tr data-bind="if: hasNoMembers"> 
     <td colspan="3"> 
      No members have been added yet 
     </td> 
    </tr> 
</table> 
3

像这样将消除需要任何条件注释,只使用数据绑定:

<tbody data-bind="foreach: members"> 
    <tr> 
    <td data-bind="text: Id"></td> 
    <td data-bind="text: FirstName"></td> 
    <td data-bind="text: LastName"></td> 
    </tr> 
</tbody> 
<tfoot data-bind="if: (memberCount == 0)"> 
<tr> 
    <td colspan="3"> 
     No members have been added yet 
    </td> 
</tr> 
</tfoot> 
1

这个怎么样:

上的jsfiddle
<table>   
    <tbody data-bind="foreach: members"> 
     <tr> 
      <td data-bind="text: Id"></td> 
      <td data-bind="text: FirstName"></td> 
      <td data-bind="text: LastName"></td> 
     </tr> 
    </tbody> 

    <tbody data-bind="if: members().length == 0"> 
     <tr> 
      <td colspan="3">No members have been added yet</td> 
     </tr> 
    </tbody>  
</table> 

证明:http://jsfiddle.net/fkQQ2/

+0

我不认为这是有效的HTML在表中有两个''标签。 –

+1

@MichaelBerkompas,我认为这是可能的 - http://stackoverflow.com/questions/3076708/can-we-have-multiple-tbody-in-same-table –

+1

@迈克尔Berkompas两个theads是无效的,你可以有许多tbody,只要你喜欢 – 0lukasz0