Я использую группу кнопок Bootstrap Twitter вместе с Knockout. Я чувствую, что я пропускаю что-то очень простое, но мне не удалось получить привязку checked
, работающую в этом экземпляре.Knockout checked binding not working
У меня есть jsFiddle, воспроизводящий проблему здесь: http://jsfiddle.net/n5SBa/.
Вот код из скрипкой:
HTML
<div class="form-group">
<div class="btn-group" data-toggle="buttons">
<label class="btn btn-primary" data-bind="click: ClickScore.bind($data, '0'), css: { active: Score() == '0' }">
<input type="radio" name="score" value="0" data-bind="checked: Score" /> 0
</label>
<label class="btn btn-primary" data-bind="click: ClickScore.bind($data, '1'), css: { active: Score() == '1' }">
<input type="radio" name="score" value="1" data-bind="checked: Score" /> 1
</label>
<label class="btn btn-primary" data-bind="click: ClickScore.bind($data, '2'), css: { active: Score() == '2' }">
<input type="radio" name="score" value="2" data-bind="checked: Score" /> 2
</label>
<label class="btn btn-primary" data-bind="click: ClickScore.bind($data, '3'), css: { active: Score() == '3' }">
<input type="radio" name="score" value="3" data-bind="checked: Score" /> 3
</label>
<label class="btn btn-primary" data-bind="click: ClickScore.bind($data, '4'), css: { active: Score() == '4' }">
<input type="radio" name="score" value="4" data-bind="checked: Score" /> 4
</label>
<label class="btn btn-primary" data-bind="click: ClickScore.bind($data, '5'), css: { active: Score() == '5' }">
<input type="radio" name="score" value="5" data-bind="checked: Score" /> 5
</label>
</div>
</div>
<pre data-bind="text: ko.toJSON($data, null, 2)"></pre>
Javascript
function SurveyViewModel() {
var self = this;
self.Score = ko.observable();
//Events
self.ClickScore = function (score) {
self.Score(score);
};
//Computations
self.RecommendationLabel = ko.computed(function() {
if (self.Score() < 8) {
return "Some question?";
} else {
return "Some other question?";
}
});
self.DOMSelectedScore = ko.computed(function() {
if ($('input[name=score]:checked').val()) {
return $('input[name=score]:checked').val();
} else {
return 'no value!';
}
});
};
var surveyViewModel = new SurveyViewModel();
ko.applyBindings(surveyViewModel);
В примере, я не могу получить реальную кнопку радио выбранный в DOM, чтобы он мог быть правильно представлен в моей форме.
У меня действительно есть моя настройка кода для передачи в строках, это была опечатка с моей стороны. Проблема все еще существует даже в скрипте, которую вы связали (выбранное значение DOM все еще не определено) –
Я открыл консоль и запустил '$ ('input [name = score]: checked')', и он вернет правильный элемент. –
Я даю вам +1, потому что ваш ответ был, безусловно, полезен. Тем не менее, я добавляю свой собственный ответ просто потому, что похоже, что проблема была немного более запутанной, чем я думал. –