Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Radio buttons Knockoutjs

Tags:

I have 2 values that I get from server A and B. I can only have one true at a time.

Again what I need is one of the radios to be checked at a time so one true value only.

var viewModel = {      radioSelectedOptionValue: ko.observable("false"),      A: ko.observable("false"),      B: ko.observable("false")   };  ko.applyBindings(viewModel);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/2.1.0/knockout-min.js"></script>  <div class='liveExample'>              <h3>Radio View model</h3>          <table>          <tr>              <td class="label">Radio buttons:</td>              <td>                  <label><input name="Test" type="radio" value="True" data-bind="checked: A" />Alpha</label>                  <label><input name="Test" type="radio" value="True" data-bind="checked: B" />Beta</label>              </td>          </tr>      </table>        A-<span data-bind="text: A"></span>      B-<span data-bind="text: B"></span>  </div>
like image 913
NoviceDeveloper Avatar asked Apr 28 '13 04:04

NoviceDeveloper


People also ask

How do you activate a Knockoutjs model?

To activate Knockout, add the following line to a <script> block: ko. applyBindings(myViewModel); You can either put the script block at the bottom of your HTML document, or you can put it at the top and wrap the contents in a DOM-ready handler such as jQuery's $ function.

Is checked in Knockout js?

This binding is used to create a link between a checkable form element and ViewModel property. Mostly these form elements are inclusive of check box and radio buttons.

Is checked binding?

The checked binding links a checkable form control — i.e., a checkbox ( <input type='checkbox'> ) or a radio button ( <input type='radio'> ) — with a property on your view model. When the user checks the associated form control, this updates the value on your view model.

What is $data in Knockout?

The $data variable is a built-in variable used to refer to the current object being bound. In the example this is the one of the elements in the viewModel.


2 Answers

Knockout 3.x added the checkedValue binding option. This allows you to specify values other than strings.

    <input name="Test" type="radio" data-bind="checked: radioSelectedOptionValue, checkedValue: true" />     <input name="Test" type="radio" data-bind="checked: radioSelectedOptionValue, checkedValue: false" /> 

http://jsfiddle.net/t73d435v/

like image 74
Tim Yonker Avatar answered Oct 26 '22 07:10

Tim Yonker


The checked binding works differently for radio buttons and checkboxes:

From the documentation:

For radio buttons, KO will set the element to be checked if and only if the parameter value equals the radio button node’s value attribute. So, your parameter value should be a string.

So you need to set the value attribute of your inputs to "A" and "B" and then bind to the radioSelectedOptionValue which will contain "A" or "B" depending on which options is selected:

<label>     <input name="Test" type="radio" value="A"               data-bind="checked: radioSelectedOptionValue" />     Alpha </label> <label>     <input name="Test" type="radio" value="B"               data-bind="checked: radioSelectedOptionValue" />     Beta </label> 

If you want to keep your boolean properties: A and B, you need to make them ko.computed (read-only, writable) which will use/convert the value of the radioSelectedOptionValue:

this.radioSelectedOptionValue = ko.observable(); this.A = ko.computed( {         read: function() {             return this.radioSelectedOptionValue() == "A";         },         write: function(value) {             if (value)                 this.radioSelectedOptionValue("A");         }     }, this); 

Demo JSFiddle.

like image 20
nemesv Avatar answered Oct 26 '22 06:10

nemesv