2012-12-01 33 views
25

html, biz metnin tıklayabilir veya bir radyo düğmesi veya onay kutusunun metnin üzerine getirdiğinizde, biz html ile seçmek edebiliyoruz aşağıda gösterildiği gibi:Etiketleme Seçim ve Radyo

<label> 
<input type="checkbox" />option 1 
</label> 

YA

<input id="checkboxid" type="checkbox" /> 
<label for="checkboxid">option 1</label> 

Ben nakavt ile aynı davranışı almaya çalışırken, ama am aynı üzerinde çok yardım bulamayan:

<label data-bind="text: $data.optiontext"> 
    <input type="checkbox" data-bind="value: $data.optionvalue, checked: $parent.selectedOptions" /> 
</label> 

View (veya html) (yukarıdaki html içermiyor aşağıdaki kodu Not yüzden onu çalıştığınızda yukarıdaki değişiklikler yapmanız gerekir ve bunu kontrol edecektir) aşağıda verilmiştir: Burada

<div data-bind="foreach: options"> 
    <input type="checkbox" data-bind="value: $data.optionvalue, checked: $parent.selectedOptions" /> 
    <label data-bind="text: $data.optiontext"></label> 
</div> 

<hr /> 

<div data-bind="text: selectedOptionsList"></div>​ 

görünümüdür modeli: http://jsfiddle.net/rupesh_kokal/AFzbY/

cevap

33

metnin için span ekstra kullanarak 1. versiyonunu elde edebilirsiniz:

İşte

var viewModel = { 
    options: [ 
       { optiontext: 'Simple', optionvalue: "1" }, 
       { optiontext: 'Advanced', optionvalue: "2" } 
      ], 
    selectedOptions: ko.observableArray(["2"]) 
}; 

viewModel.selectedOptionsList = ko.computed(function() { 
    return this.selectedOptions().join(","); 
}, viewModel); 

ko.applyBindings(viewModel); 

jsFiddle link

Demo fiddle.

Ya id ve for niteliğini belirlemek için attr binding kullanarak 2. sürümü:

<input type="checkbox" data-bind="value: $data.optionvalue, 
     checked: $parent.selectedOptions, attr: { id: optiontext}" />  
<label data-bind="text: $data.optiontext, attr: {for: optiontext}" /> 

Demo fiddle

+0

Teşekkürler nemesv. İlk seçenek benim görevime en uygun olacaktı. İkinci sürüm benim durumumda çalışmaz, dinamik olarak oluşturulan ve benzersiz bir kimliği aynı şekilde atamak için dinamik bir yol gerektirmesi gereken çeşitli onay kutusu denetimlerine sahip olduğum için. Bunu nakavt olarak içsel olarak atamayı önemseyen benzersiz bir kimlik yaratmak gibi bir yolumuz var mı? – Rups

+1

Benzersiz kimlikler oluşturmak ve atamakla ilgilenecek hiçbir şey yok. Yani bunu kendiniz uygulamanız gerekiyor: Kimlik oluşturma hakkında bazı SO soruları http://stackoverflow.com/questions/3231459/create-unique-id-with-javascript, http://stackoverflow.com/questions/105034/how- to-create-a-guid-uuid-in-javascript – nemesv

+0

Teşekkürler nemesv, içine bakmak. – Rups

3

Yo bile ekstra yayılma düşmesi bağlayıcı alabilirsiniz - Knockouts yorum-bağlama sözdizimini kullanarak, -element:

<label> 
<input type="checkbox" data-bind="value: $data.optionvalue, 
     checked: $parent.selectedOptions" /> 
<!-- ko text: $data.optiontext --><!-- /ko --></label> 

Bu, dar alanlarda kullanıldığında onay kutusunun ve açıklığın iki satırdan ayrılmasını engeller.