bu seçeneği olmaması böyle, kütüphanenin niteliği dikkate alınarak (orada dedim o) olarak savunulabilir hayal ve geliştiricinin ekibi felsefesi:
Nakavt bir kütüphane ve diğer MVC'ın bunun aksine uygulamanızı yapılandırmak için çerçeve tanımlı bir yol kullanmaya zorlamaz. Knockout'daki şablon motorunu ve hemen hemen tüm diğer JS şablonlama motorlarını (Açısal, alt çizgi, bıyık, vb.) Düşünürseniz, Knockout, 'modding' yerel HTML5 oluşturmayan tek kişi olarak ortaya çıkar. Diğerleri özel bir etiket kullanıyorlar, <% %>
veya {{ }}
olsun, etiketleri anlamlı bir şeye dönüştürmek için küçük bir JS ayrıştırıcısı gerekiyor (şimdi KO ayrıca bıyık tarzı etiketler içeren bir Knockout punches eklentisine de sahiptir ve kuşkusuz KO at "günah" a <!-- ko -->
yorum ile küçük bir bit). KO yerine, HTML 5 özel öğeleri, yorum ve özellik etiketleri, tamamen "vanilya" kullanır.
Örneğin, 'nesne (ve gerçek hayat?) Hiyerarşisi' JS/DOM türü kullanılır: yalnızca ebeveynler çocuklarına numaralı güçte egzersiz yapabilir ve böylece bağlı öğesi değiştirilmez, ancak büyütülür. çocuklarla.Örnek için: Daha sonra
// we cannot do this in JS
document.getElementById('elem').remove(); //implied .remove(self)
// instead we do this
var elem = document.getElementById('elem');
container = elem.parentNode.removeChild(elem);
, tercih edilen bir yol verileri bağlayıcı, KO ile bağlanma foreach
ile de gösterildiği gibidir:
<div data-bind="foreach: myList">
<span data-bind="text: $data"></span>
</div>
önceki pasajı, bir JS bir HTML temsilidir dizi, hiyerarşi tekrar görünür geçerli:
var myArr = [1,2,3,4,5];
// we cannot do the following without reference to the array index,
// which is not held by the object itself,
// but a meta-property getting meaning relative to the parent
myArr[0].splice(0,1); //remove
Bu perfe olma HTML görünümüne yol açar JS verilerinizin çoğaltılması (ve birisinin bir HTML belgesindeki veri bağlama girinti düzeylerini (with
ve foreach
ile) gösteren bir araç oluşturduğunu görmek ilginç olacaktır. Bununla birlikte, bazı durumlarda, HTML'inizin düzenini bozmamanız için yorum etiketlerine, veya css kurallarınıza (yuvalama), örneğin metin arasında enjekte edilecek 'salt metin' bileşenine (i18n) ihtiyacınız vardır. düğümleri:
<p>Some predefined text with
<!-- ko text: 'some variable text' --><!-- /ko -->
and more predefined text</p>
Ya
<!-- ko if: !hidden() --><div id="myToggleableDiv"></div><!-- /ko -->
gizli sonra standardize olan
custom tags vardır ve bir cehennem çok daha net bir zaman yer kaplar için boş bir öğesi istemiyorsanız ; ama maalesef henüz% 100 hazır değil. Önce
data-bind
,
<!-- ko -->
saniye ve
<custom>
üçüncü (tam olarak uygulanırsa daha yüksek) seçin. Her nasılsa onu görüyorum. senin bileşeni liste modeli tutarsa özel durumunuzun gelince, bunu yapabilirsiniz: Bir listitem modeli ise
<table data-bind="{component: {name: 'custom', params {..}}"></table>
Ve senin VM başka tbody
dahil, aşağıdaki yöntemlerden birini kullanabilirsiniz üç biri '
<table>
<tbody data-bind="foreach: mylist">
<tr data-bind="foreach: properties">
<td data-bind="component: {name: 'custom', params: $data}></td>
</tr>
</tbody>
</table>
: sözdizimi, örneğin
SOC principle bağlı kalarak, yorum sözdizimini
<table>
<tbody data-bind="foreach: mylist">
<!-- ko component: {name: 'custom', params: $data} --><!-- /ko -->
</tbody>
</table>
örneğin Veya belirli bir ebeveyn (tablo) içine yuvalanmış olma şartından tamamen bileşeni decouple
veya özel bir etiketle: tercih bu sırayla
<table>
<tbody data-bind="foreach: mylist">
<tr data-bind="foreach: properties">
<td><custom params= "{data: myData"></custom></td>
</tr>
</tbody>
</table>
..
(http://knockoutjs.com/documentation/template-binding.html) Aradığınız budur. Web bileşeni, genel olarak, bir DOM düğümüdür, bunun çocuğunun gölgelenmesidir. Kavramın kendisi böyle bir durumda mahvolduğu için _replaced_ olması amaçlanmamıştır. – mudasobwa