KnockoutJS sintaks pengikat tanpa kontainer
Harap bersabar sebentar: KnockoutJS menawarkan opsi yang sangat nyaman untuk menggunakan sintaks pengikat tanpa kontainer untuk foreach
pengikatannya seperti yang dibahas dalam Catatan 4 dari foreach
dokumentasi penjilidan.
http://knockoutjs.com/documentation/foreach-binding.html
Seperti yang diilustrasikan oleh contoh dokumentasi Knockout, Anda dapat menulis binding Anda di KnockoutJS seperti ini:
<ul>
<li class="header">Header item</li>
<!-- ko foreach: myItems -->
<li>Item <span data-bind="text: $data"></span></li>
<!-- /ko -->
</ul>
Saya rasa cukup disayangkan AngularJS tidak menawarkan jenis sintaks ini.
Angular ng-repeat-start
danng-repeat-end
Dalam cara AngularJS untuk memecahkan ng-repeat
masalah, sampel yang saya temukan adalah tipe jmagnusson yang diposting dalam jawabannya (membantu).
<li ng-repeat-start="page in [1,2,3,4,5]"><a href="#">{{page}}</a></li>
<li ng-repeat-end></li>
Pikiran asli saya setelah melihat sintaks ini adalah: benarkah? Mengapa Angular memaksakan semua markup ekstra yang tidak ingin saya lakukan dan itu jauh lebih mudah di Knockout? Tapi kemudian komentar hitautodestruct dalam jawaban jmagnusson mulai membuat saya bertanya-tanya: apa yang dihasilkan dengan ng-repeat-start dan ng-repeat-end pada tag terpisah?
Cara yang lebih bersih untuk menggunakan ng-repeat-start
danng-repeat-end
Setelah menyelidiki pernyataan hitautodestruct, menambahkan ng-repeat-end
ke tag terpisah persis seperti yang tidak ingin saya lakukan dalam banyak kasus, karena menghasilkan elemen yang sama sekali tidak berguna: dalam hal ini, <li>
item yang tidak memiliki apa pun di dalamnya. Daftar paginasi Bootstrap 3 mengatur gaya item daftar sehingga terlihat seperti Anda tidak menghasilkan item yang berlebihan, tetapi ketika Anda memeriksa html yang dihasilkan, mereka ada di sana.
Untungnya , Anda tidak perlu melakukan banyak hal untuk mendapatkan solusi yang lebih bersih dan jumlah html yang lebih pendek: cukup letakkan ng-repeat-end
deklarasi di tag html yang sama yang memiliki ekstensing-repeat-start
.
<ul class="pagination">
<li>
<a href="#">«</a>
</li>
<li ng-repeat-start="page in [1,2,3,4,5]" ng-repeat-end><a href="#"></a></li>
<li>
<a href="#">»</a>
</li>
</ul>
Ini memberikan 3 keuntungan:
- lebih sedikit tag html untuk ditulis
- tidak berguna, tag kosong tidak dibuat oleh Angular
- ketika larik yang akan diulang kosong, tag dengan
ng-repeat
tidak akan dibuat, memberi Anda keuntungan yang sama dengan pengikatan tanpa kontainer Knockout yang memberi Anda dalam hal ini
Tapi masih ada cara yang lebih bersih
Setelah meninjau lebih lanjut komentar di github tentang masalah ini untuk Angular, https://github.com/angular/angular.js/issues/1891 ,
Anda tidak perlu menggunakan ng-repeat-start
dan ng-repeat-end
mendapatkan keuntungan yang sama. Sebagai gantinya, bercabang lagi contoh jmagnusson, kita bisa pergi:
<ul class="pagination">
<li>
<a href="#">«</a>
</li>
<li ng-repeat="page in [1,2,3,4,5,6]"><a href="#">{{page}}</a></li>
<li>
<a href="#">»</a>
</li>
</ul>
Jadi kapan harus digunakan ng-repeat-start
dan ng-repeat-end
? Sesuai dokumentasi sudut , untuk
... ulangi serangkaian elemen, bukan hanya satu elemen induk ...
Cukup bicara, tunjukkan beberapa contoh!
Cukup adil; jsbin ini menjelaskan lima contoh tentang apa yang terjadi saat Anda melakukannya dan saat Anda tidak menggunakan ng-repeat-end
tag yang sama.