2012-12-01 13 views
25

w HTML, kiedy kliknij na tekst lub najechaniu na tekst przycisku radiowego lub wyboru, jesteśmy w stanie go wybrać z html, jak pokazano poniżej:Oznakowanie checkbox i radio nokautem

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

OR

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

próbuję uzyskać ten sam problem z nokaut, ale nie może znaleźć wiele pomocy na ten sam:

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

The View (lub html) jest poniżej (Uwaga poniższy kod nie zawiera powyższy kod HTML, więc podczas próby to trzeba będzie wprowadzić powyższe zmiany i sprawdzić):

<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>​ 

Oto widok model:

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); 

Oto link jsFiddle: http://jsfiddle.net/rupesh_kokal/AFzbY/

Odpowiedz

33

można osiągnąć w wersji 1. z użyciem dodatkowego span dla tekstu:

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

Demo fiddle.

Lub wersja z użyciem attr binding ustawić id i atrybut for 2.:

<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

Dzięki nemesv. Pierwsza opcja najlepiej pasuje do mojego zadania. Druga wersja nie zadziała w moim przypadku, ponieważ mam różne kontrolki checkbox, które są tworzone dynamicznie i wymagałyby jakiegoś dynamicznego sposobu przypisania unikalnego identyfikatora do tego samego. Czy istnieje sposób, w jaki możemy to osiągnąć poprzez nokaut, jak na przykład tworzenie unikalnego identyfikatora, którego nokaut wewnętrzny zajmuje się przydzielaniem? – Rups

+1

Nie ma nic wbudowanego w nokaut, który zajmowałby się generowaniem i przypisywaniem unikalnych identyfikatorów. Musisz sam to zaimplementować: Niektóre pytania SO dotyczące tworzenia identyfikatora 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

Dzięki nemesv zajmie się tym. – Rups

3

Yo może nawet dostać wiązanie spadać dodatkowe przęsło -element, używając składni komentarza Knockouts:

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

Zapobiegnie to rozbijaniu się pola wyboru i rozpiętości na dwóch liniach, jeśli używane są w wąskich polach.