2013-05-28 22 views
5

Mam dwa przyciski radiowe.jak ustawić przycisk radiowy za pomocą knockout.js?

<td> 
    <div style="display: inline; margin-right: 10px"> 
     <input type="radio" name="USGlobalUser" data-bind:"checked:IsGlobal/>US 
    </div> 
    <div style="display: inline"> 
     <input type="radio" name="USGlobalUser" data-bind:"checked:IsGlobal"/>Global 
    </div> 
</td> 

ja wypełniania mojego modelu jak ten

QuestionnaireModel = function (data) { 
    self.IsGlobal = ko.protectedObservable(data ? data.IsGlobal : false); 
} 

Wartość pochodzi z DB doskonale i jej uzyskiwanie zaludnionych w self.IsGlobal jako prawda/fałsz. W oparciu o to prawda/fałsz, chcę ustawić przycisk radiowy sprawdzony.

+0

jakie jest twoje pytanie? również masz błąd składniowy: brak cytatu po pierwszym "checked: IsGlobal". –

+0

Poprawiłem to. Dziękujemy za zgłoszenie błędu składni. – NayeemKhan

Odpowiedz

13

W checked binding działa różnie dla przycisków radiowych:

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.

więc IsGlobal powinien posiadać ciąg i trzeba mieć ten sam ciąg jako wartość przyciskami radia:

<input type="radio" name="USGlobalUser" 
     data-bind="checked: IsGlobalCheckbox" value="false" />US 
<input type="radio" name="USGlobalUser" 
     data-bind="checked: IsGlobalCheckbox" value="true" />Global 

W swoim modelu wyświetlania:

self.IsGlobal = ko.observable(data ? data.IsGlobal + "" : "false"); 

Jeśli chcesz zachować IsGlobal przechowywać wartość logiczną, czego potrzeba, aby utworzyć nową właściwość obliczoną dla przycisku radiowego, który robi konwersję:

self.IsGlobalCheckbox = ko.computed({ 
    read: function() { 
     return self.IsGlobal() + ""; 
    }, 
    write: function (v) { 
     if (v == "true") self.IsGlobal(true) 
     else self.IsGlobal(false) 
    } 
}); 

Demo JSFIddle.

A przy okazji, jak Tomas zauważył, że twój systax wiązania jest uszkodzony w twojej próbce.

+0

Czy to nadal jest dokładne w Knockout 3.3? – alex

+0

@alex tak, sprawdzone powiązanie działa tak samo w Knockout 3.3 – nemesv

0

Po atrybucie data-bind powinien być znak równości zamiast dwukropka.

<input type="radio" name="USGlobalUser" data-bind="checked:IsGlobal"/> 
+0

'=' nie działa – NayeemKhan

+0

Poprawiłem. Jestem nowy w KO. Dzięki – NayeemKhan

2

Wartość logiczna z DB jest Prawda/Fałsz

Zmieniłem w viewmodel:

self.IsGlobal = ko.protectedObservable(data ? data.IsGlobal.toString() : ""); 

iw cshtml:

<td> 
    <div style="display: inline; margin-right: 10px"> 
     <input type="radio" name="USGlobalUser" value="false" data-bind="checked:IsGlobal()" />US       
    </div> 
    <div style="display: inline"> 
     <input type="radio" name="USGlobalUser" value="true" data-bind="checked:IsGlobal()" />Global 
    </div> 
</td> 
Powiązane problemy