2011-11-20 13 views
12

¡Una aplicación en la que estoy trabajando con Play! Framework tiene un objeto llamado gift con una propiedad booleana, llamada Taken. ¿Cómo muestro el estado de este valor como una casilla de verificación en mi vista? He intentado: -¿Cómo puedo vincular una casilla de verificación a un booleano en Play! framework

<input id="gift_Taken" class="" type="checkbox" name="gift.Taken" value="true" /> 
<input type="hidden" name="gift.Taken" value="false" /> 

basado en ejemplos que he visto desde las formas CRUD autogenerados, pero la casilla de verificación no está marcada cuando la propiedad es verdadera, que es lo que estoy buscando.

¿Alguien sabe la forma correcta de lograrlo?

+0

Simplemente configure 'value = 'true'' en la casilla de verificación y en su firma de método agregue un parámetro' boolean taken' hará la vinculación. –

Respuesta

9

Solo tiene que establecer el valor checked en la casilla de verificación, si el valor es verdadero.

por ejemplo (suponiendo que el objeto enviado desde la vista se llama gift, y el valor booleano se llama Taken.

<input id="gift_Taken" type="checkbox" name="gift.Taken" ${gift.Taken ? 'checked':''} /> 
+0

Perfecto - Me encantan los operadores ternarios ;-) Nota al margen, voy a conseguir ese libro tuyo –

+1

El operador ternario es aún más poderoso en Groovy. Consulte el operador de elvis http://groovy.codehaus.org/Operators#Operators-ElvisOperator%28%3F%3A%29 – Codemwnci

+0

Intenté esto y no funcionó. Intenté ' 'así que esto debería tenerlo revisado todo el tiempo. Pero no es así ¿Alguna idea de por qué? –

12

la respuesta aceptada en realidad no es 100% correcta, ya que no controla el . caso "sin control" para manejar ambos casos se necesita un campo oculto:.

<input id="gift_Taken" type="checkbox" name="gift.Taken" ${gift.Taken ? 'checked':''} /> 
<input type="hidden" name="gift.Taken" value="false" /> 

Tenga en cuenta que la colocación parece ser importante, por lo que el campo oculto debe ser después de la casilla de verificación

Escribir una etiqueta de plantilla personalizada para esto, hace que sea fácil para no olvidar la entrada oculta (poner esto en vistas/etiquetas/checkbox.html):

<input id="${_id}" type="checkbox" name="${_name}" value="true" #{if _checked} checked="checked" #{/if}> 
<input type="hidden" name="${_name}" value="false"> 

luego llamar a esta plantilla como esta:

#{checkbox id:'gift_Taken', name: 'gift.Taken', checked: gift.Taken /} 

Véase también la discusión relacionada en la lista marco de juego: https://groups.google.com/forum/?fromgroups=#!topic/play-framework/HygQuYF3a8E

+0

Aunque no es ideal, otra solución es si se usa un valor predeterminado de falso en el modelo, la ausencia de un valor de casilla de verificación enviado se interpretará implícitamente como falso. Banderas rojas por todas partes, pero vale la pena mencionar. – chris

+1

Gracias por la pista para ordenar (por ejemplo, php uno usa la misma solución, pero el campo oculto se coloca antes de la casilla de verificación). – Bachi

0

Si usted es capaz de usar javascript, puede utilizar:

$(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); 
     } 
    }); 
}); 
Cuestiones relacionadas