2013-06-12 3 views
47

In meinem HTML-Bindung kann ich diese Knockout foreach Bindungen definieren:Kommentar foreach vs foreach Bindung in knockoutjs

<!-- ko foreach: customer --> 
    <div data-bind="text: id" /> 
<!-- /ko --> 

vs

<div data-bind="foreach: customer"> 
    <div data-bind="text: id" /> 
</div> 

Wo liegen die Unterschiede zwischen diesen beiden Ansätzen?

+2

Sind Sie sicher, dass Sie das Wort "besser" verwenden möchten? Das wird diese Frage näher an "subjektiv" rühren. – JDB

+0

[Hinweis 4 lesen] (http://knockoutjs.com/documentation/foreach-binding.html) –

+2

Danke jetzt beschleunigte ich mich über 2000 Punkte nur für die Frage: P – Elisabeth

Antwort

54

Verwendung nativer verbindlich, wenn eine Eltern-Kind-Beziehung existiert innerhalb des Bindungsabschnittes, wie ein ul und li basiert.

Verwenden Sie die Kommentarsyntax für die containerlose Bindung, wenn Ihr Bindungsabschnitt keine Eltern-Kind-Beziehung hat.

In Ihrem Beispiel verwenden Sie den ersten Codeblock, weil Sie nicht versuchen, an eine Eltern-Kind-Struktur zu binden. Alles, was Sie tun möchten, ist nur binden Sie Ihre Kundendaten an ein div, Sie sollten nicht über die Kunden ein Elternteil div und foreach erstellen und ein weiteres div innerhalb der Eltern div. Es ist mehr als Sie wollen.

Gute Verwendung von behälterlosen Bindung

<!-- ko foreach: customer --> 
<section> 
    <p data-bind="text: customer.name"></p> 
    <p data-bind="text: customer.orderDate"></p> 
</section> 
<!-- /ko --> 

Wenn Sie jedoch eine geordnete Liste haben, sollten Sie die nativen Bindung verwenden, weil es einfach Sinn macht.

india

<ol data-bind="foreach: customer"> 
    <li data-bind="text: customer.name"></li> 
</ol> 

behälter

<ol> 
    <!-- ko foreach: customer --> 
     <li data-bind="text: customer.name"></li> 
    <!-- /ko --> 
</ol> 

Das zweite Beispiel sieht einfach albern. Sie fügen mehr Komplexität für etwas hinzu, das nicht kompliziert sein sollte.

+4

Ich würde hinzufügen, dass Containerlose Bindung die beste Lösung für Situationen ist wo Sie in welchen Elementen begrenzt sind, die Sie tatsächlich zu einem gegebenen Container per HTML-Spezifikation hinzufügen können. Beispielsweise haben Sie einen tbody mit einer statischen Zeile und dann ein beobachtbares Array, das die dynamischen Zeilen darstellt, aber das einzige gültige Kind eines tbody ist ein tr-Element. – kmkemp