2016-04-20 6 views
0

Was ich versuche zu tun ist einige Radiobuttons mit Daten vom Server zu zeigen. Das Problem ist, dass der überprüfte Wert für die Radio-Buttons alle falsch sein kann und dann wählt KO automatisch den letzten Radio-Button wie in der JS-Geige, die ich unten erstellt habe. Dies funktioniert perfekt wie beabsichtigt, wenn einer der Werte wahr ist, aber in meinem Fall besteht eine hohe Wahrscheinlichkeit, dass diese Werte alle falsch sind.Knockout JS Radiobuttons Auswahl der letzten Taste, wenn alle Werte wahr sind

https://jsfiddle.net/9mtzbmng/1/

self.addItems = function (items) { 
      for (var x in items) 
      { 
       self.Items.push(new Item(items[x])); 
      } 
     } 
    function Item(items) { 
    this.ID = items.ID; 
    this.Checked = ko.observable(false); 
    } 

<input type="radio" data-bind="value: $data.ID,checked: Checked, checkedValue: Checked" name="items"> 

EDIT: https://jsfiddle.net/hrhuym0u/ Meine Frage nach dem Anschluss an diese jsfiddle wurde behoben, indem die checkedValue: 'true' Einstellung und this.Checked = ko.observable("false") Einstellung!

+0

Bitte stellen Sie sicher, dass sich die Frage enthält den gesamten Code erforderlich, um das Problem zu repro. Wenn Ihr [jsfiddle link verrotten] (https://en.wikipedia.org/wiki/Link_rot) wird die Frage für zukünftige Besucher viel weniger nützlich sein. – Jeroen

Antwort

2

Vom documentation:

Für Radio-Buttons, KO das Element gesetzt werden muss geprüft werden, wenn und nur wenn der Parameterwert entspricht das Optionsfeld Knotens `` Wertattribut oder der angegebenen Wert von den checkedValue Parameter

In Ihrem Fall müssen Sie checkedValue zu true so einzustellen, wenn Ihr Checkedtrue beobachtbaren enthält nur dann überprüft er das Radio-Taste :

<input type="radio" name="radioB" data-bind="value: $data.ID, 
              checked: Checked, 
              checkedValue: true"> 

Demo https://jsfiddle.net/r6njzje3/

Hinweis: überprüft werden kann, wenn Ihre Radio-Buttons die gleichen name hat dann eine Gruppe, die sie so nur einer von ihnen bilden ist, auf diese Weise in der ursprünglichen Probe immer die letzten wird geprüft. Denn der checked entspricht immer dem Wert checkedValue. Also, wenn Sie den Namen name="radioB" entfernen würden alle Ihre Radios überprüft werden.

Hinweis 2: Sie sollten sicherstellen, dass Sie tatsächliche boolea n Werte in Ihren Checked Eigenschaften haben und Ihr Server sendet sie nicht als Zeichenfolgen, z. "true", denn in diesem Fall, dass Sie auch die checkedValue als String angeben müssen:

<input type="radio" name="radioB" data-bind="value: $data.ID, 
              checked: Checked, 
              checkedValue: 'true'"> 

Demo: https://jsfiddle.net/hrhuym0u/

+0

Problem ist, dass jetzt alle wahr sind, wenn ich also Daten vom Server bekomme, die sagen, dass einer von ihnen wahr ist, dann wird kein Wert überprüft – xDevil

+0

Haben Sie das Namensattribut entfernt? Für mich funktioniert hier alles richtig und alles falsch: https://jsfiddle.net/7w2uvjqz/1/, Können Sie diese Geige aktualisieren, wenn sie immer noch nicht funktioniert? – nemesv

+0

Ich habe den Namensattribut nicht entfernt, weil ich sie als Gruppe verwenden muss, deshalb haben sie den gleichen Namen in der JSfiddle, die ich gemacht habe – xDevil

Verwandte Themen