KnockoutJS kapsayıcısız bağlama sözdizimi
Lütfen bir saniye bekleyin: KnockoutJS foreach
, foreach
bağlayıcı dokümantasyonun Not 4'te tartışıldığı gibi , bağlayıcılığı için kapsayıcı olmayan bir ciltleme sözdizimi kullanmak için son derece uygun bir seçenek sunar .
http://knockoutjs.com/documentation/foreach-binding.html
Altını Gizleme belgesi örneğinde gösterildiği gibi, bağlamanızı KnockoutJS'de şu şekilde yazabilirsiniz:
<ul>
<li class="header">Header item</li>
<!-- ko foreach: myItems -->
<li>Item <span data-bind="text: $data"></span></li>
<!-- /ko -->
</ul>
AngularJS bu tür bir sözdizimi sunmamanın oldukça talihsiz olduğunu düşünüyorum.
Angular ng-repeat-start
veng-repeat-end
AngularJS ng-repeat
problem çözme yönteminde, karşılaştığım örnekler jmagnusson (yardımcı) cevabında yayınlanan türdendir.
<li ng-repeat-start="page in [1,2,3,4,5]"><a href="#">{{page}}</a></li>
<li ng-repeat-end></li>
Bu sözdizimini gördükten sonra ilk düşüncem: gerçekten mi? Neden Angular, hiçbir şey yapmak istemediğim ve Knockout'ta bu kadar kolay olan tüm bu ekstra işaretlemeyi zorluyor? Ama sonra hitautodestruct'un jmagnusson'ın cevabındaki yorumu beni meraklandırmaya başladı: ayrı etiketlerde ng-tekrar-başlangıç ve ng-tekrar-bitiş ile ne üretiliyor?
Kullanmanın daha temiz bir yolu ng-repeat-start
veng-repeat-end
Hitautodestruct iddiasının araştırılması üzerine, ng-repeat-end
ayrı bir etikete eklemek kesinlikle yapmayacağım şeydi de tamamen usesless elemanları üretir, çünkü çoğu durumda yapmak istiyorum: bu durumda, <li>
onlara hiçbir şey öğeleri. Bootstrap 3'ün sayfalandırılmış listesi, liste öğelerini, gereksiz öğeler oluşturmamışsınız gibi görünecek şekilde biçimlendirir, ancak oluşturulan html'yi incelediğinizde, bunlar oradadır.
Neyse : Eğer temiz bir çözüm ve html daha kısa bir miktarda olması çok fazla bir şey gerekmez , sadece koymak ng-repeat-end
vardır aynı html etiketi deklarasyonung-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>
Bu 3 avantaj sağlar:
- yazmak için daha az html etiketi
- işe yaramaz, boş etiketler Angular tarafından oluşturulmaz
- Yinelenecek dizi boş olduğunda, etiketi
ng-repeat
oluşturulmaz ve size Knockout'un kapsayıcı içermeyen bağlamasının bu konuda sağladığı aynı avantajı sağlar
Ama hala daha temiz bir yol var
Ve eksen, bu konuda github yorumların inceledikten sonra https://github.com/angular/angular.js/issues/1891 ,
kullanmak gerekmez ng-repeat-start
ve ng-repeat-end
aynı avantajları elde etmek. Bunun yerine, jmagnusson örneğini tekrar çatallayarak, şöyle gidebiliriz:
<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>
Peki ne zaman kullanılmalı ng-repeat-start
ve ng-repeat-end
? Uyarınca açısal belgeleri için
... tek bir ana öğe yerine bir dizi öğeyi tekrarlayın ...
Bu kadar konuşma yeter, bazı örnekler gösterin!
Yeterince adil; bu jsbin, bunu yaptığınızda ve kullanmadığınızda ne olduğunang-repeat-end
, aynı etiketi .