Как привязать флажок к логическому в Play! фреймворк
Приложение, над которым я работаю, используя Play! Framework имеет объект, называемый даром с булевым свойством, называемым Taken. Как показать состояние этого значения в качестве флажка на моем представлении? Я пробовал: -
<input id="gift_Taken" class="" type="checkbox" name="gift.Taken" value="true" />
<input type="hidden" name="gift.Taken" value="false" />
на основе примеров, которые я видел из автогенерированных форм CRUD, но флажок не проверяется, когда свойство True, к чему я стремлюсь.
Кто-нибудь знает правильный способ достичь этого?
Ответы
Ответ 1
Вам просто нужно установить значение checked
напротив этого флажка, если значение истинно.
например (предполагается, что объект, отправленный из представления, называется gift
, а логическое значение называется Taken
.
<input id="gift_Taken" type="checkbox" name="gift.Taken" ${gift.Taken ? 'checked':''} />
Ответ 2
Принятый ответ на самом деле не на 100% правильный, поскольку он не обрабатывает "непроверенный" случай. Для обработки обоих случаев вам нужно скрытое поле:
<input id="gift_Taken" type="checkbox" name="gift.Taken" ${gift.Taken ? 'checked':''} />
<input type="hidden" name="gift.Taken" value="false" />
Обратите внимание, что размещение кажется важным, поэтому скрытое поле должно быть после флажка.
Написание специального тега шаблона для этого позволяет легко забыть скрытый ввод (поместите это в views/tags/checkbox.html):
<input id="${_id}" type="checkbox" name="${_name}" value="true" #{if _checked} checked="checked" #{/if}>
<input type="hidden" name="${_name}" value="false">
Затем вызовите этот шаблон следующим образом:
#{checkbox id:'gift_Taken', name: 'gift.Taken', checked: gift.Taken /}
См. также соответствующую дискуссию по списку фреймов: https://groups.google.com/forum/?fromgroups=#!topic/play-framework/HygQuYF3a8E
Ответ 3
Если вы можете использовать javascript, вы можете использовать:
$(document).ready(function() {
$( ":checkbox" ).each(function() {
var name = $(this).attr("name");
if(typeof(name) != "undefined") {
var checkboxString = "";
checkboxString = '<input type="hidden" style="display:none;" name="'+ name +'" value="false" />'
$(this).after(checkboxString);
}
});
});