2012-01-24 7 views
6

içeride $ veri üzerinde iki yönlü bağlayıcı alınıyor. ASP.NET'in dinamik verilerini hiç kullandıysanız: alan şablonlarına benzer. Örneğin:Ben düzenleme ve veri türüne göre salt okunur modu arasında geçiş yapabilmektedir kurulum jenerik Nakavt şablonları çalışıyorum şablon

<script type="text/html" id="text"> 
    <!-- ko if: $root.editable --> 
     <input type="text" data-bind="value: $data" /> 
    <!-- /ko --> 

    <!-- ko ifnot: $root.editable --> 
     <span data-bind="text: $data"></span> 
    <!-- /ko --> 
</script> 

Bu böyle kullanılır:

var viewModel = { 
     name: ko.observable("Brian"), 
     editable: ko.observable(true) 
    }; 

fikri gibi saha düzeyinde şablonları kullanmak mümkün şudur: Şu görünüm modeliyle

<label><input type="checkbox" data-bind="checked: editable" /> Editable</label> 

<p>Name: <input data-bind="value: name" /></p> 
<p>Name2: <span data-bind="template: { name: 'text', data: name }"></span></p> 

"Name2" örneğinde, açık öğeler/denetimler yerine. Bu, tüm formların, çoğunlukla çoğaltılmış işaretlemenin büyük bölümlerine sahip olmadan düzenleme ve okuma modu arasında kolayca değiştirilebilmesini sağlar. Bu aynı zamanda Sorun
şablonu içinde $data sözde değişken iki yönlü bağlayıcı yoktur vb

, tarih alanları için datepickers kullanarak örneğin, ortak veri türü düzenleme/ekran biçimlendirme yeniden kullanılmasına olanak sağlar. Gözlenebilir olandaki mevcut değeri yansıtacaktır, ancak giriş kontrolündeki değişiklikler değeri ayarlamayacaktır.

nasıl iki yönlü $data bağlayıcı alabilirim? "O zaman

template: { name: 'text', data: {field: name} } 

, "alanına" karşı bağlamak yerine:

Ayrıca bkz this jsfiddle

cevap

7

En basit seçim veya ağ erişimi gibi gerçek gözlemlenebilir erişmenizi sağlar bağlanma şablonuna bir nesne geçmektir Şablonunuzda $ data ".

Şablonunuzu belirlemek için bir işlev kullanarak olurdu Başka bir şey düşünmek, o zaman gibi düzenleme/görünüm için ayrı şablonlar kullanabilirsiniz:
http://www.knockmeout.net/2011/03/quick-tip-dynamically-changing.html

+0

teşekkür ederiz! Sen Ryan’ın sensin! –

+0

Tek bir soru, belki herkes neden "$ data" ve "$ item" anahtar sözcüklerini kullandığımı - şablonun oluşturulmadığını, ancak ViewModel alan adları tarafından "foreach" öğesinden geçirildiğinde öğelerin iyi çalıştığını bilir. ViewModel kullanıcı dizisi ile (tek ismiyle 'alan'), sonra 'isim' şablonuna bağlanırken, '$ data' veya '$ item' kullanıldığında - çalışamaz. Örneğin, 'çalışmıyor, ancak ' dır, bu yüzden '$ root' a erişemiyorum, $ item, $ data' böyle bir soruna neden olabilir? Teşekkürler – sll

+0

Belki sorununuzu bir jsFiddle'da oluşturabilir misiniz? '$ item' yalnızca jQuery Şablonlarında kullanılabilir. Eğer '$ data' bir nesne ise, o zaman bunu text binding'e iletmek istemezsiniz, 'text: name' ya da' text: $ data.name' (ikinci sözdizimi undefined ile yardımcı olur) yapmak istersiniz. –