2013-06-03 47 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