2013-04-28 11 views
17

Ich habe 2 Werte, die ich von Server A und B bekomme. Ich kann nur eine wahr zu einer Zeit haben.Radioknöpfe Knockoutjs

Noch einmal, was ich brauche ist eines der Funkgeräte zu einem Zeitpunkt überprüft werden, so dass nur ein echter Wert.

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>

+0

Aktualisiert: http://jsfiddle.net/hamsaya/cyBQH/2/ – NoviceDeveloper

+0

Dies ist eine weitere wunderbare Antwort: http://stackoverflow.com/a/20080917/683157 – kuboon

Antwort

25

Die checked Bindung funktioniert anders für Radio-Buttons und Checkboxen:

Vom documentation:

Für Radio-Buttons, wird KO das Element zu überprüfen wenn und nur wenn die para Meterwert entspricht dem Attribut value des Optionsfeldknotens. Also sollte Ihr Parameterwert ein String sein.

So müssen Sie das value Attribut Ihrer Eingaben auf „A“ und „B“ und dann binden an die radioSelectedOptionValue die „A“ oder „B“ je nachdem, welche Optionen enthalten ausgewählt:

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

Wenn Sie Ihre boolean Eigenschaften behalten möchten: A und B, müssen Sie sie ko.computed (read-only, beschreibbar) machen, die den Wert des radioSelectedOptionValue wird verwenden/konvertiert:

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.

+0

Dies ist gut, aber wenn ich meinen Wert vom Server bekomme, ist es bereits falsch oder wahr Ich möchte den Benutzer Radio Button ausgewählt werden. Ich denke nicht, dass das das überprüfen wird. – NoviceDeveloper

+0

Da in meinem Beispiel A und B beschreibbare Berechnungen sind, können Sie ihnen true oder false zuweisen. Ich habe eine Beispiel-'loadDataFromServer'-Methode in http://jsfiddle.net/p8nSe/1/ hinzugefügt, um es zu demontieren. – nemesv

18

Knockout 3.x hat die Option bookmarkedValue hinzugefügt. Dadurch können Sie andere Werte als Strings angeben.

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

+0

Tim, vielleicht könnten wir uns treffen, um das weiter zu besprechen? Ich habe Probleme mit dem neuen Hedges-Tab. – bubbleking