Establezca el elemento seleccionado en una lista de selección según el valor de la plantilla

¿Cómo se puede rellenar correctamente un control de selección con el valor actual de la plantilla?

Tengo un formulario simple para editar un registro donde los valores para el registro seleccionado se rellenan previamente cuando se muestra el formulario. Un poco como esto:

 

Pero cuando estoy usando un control de selección, tengo que ser capaz de intercalar el valor de la plantilla y establecer condicionalmente la propiedad selected='selected' para la opción correcta.

  GOOD BAD UGLY  

handlesbars.js ofrece la ayuda #IF pero esto solo da verdad o falsedad.

Probablemente podría hackear esto de varias maneras, pero parece un escenario en el que habría una solución estándar.

Puedes usar un ayudante:

 Handlebars.registerHelper('selected', function(foo, bar) { return foo == bar ? ' selected' : ''; }); 

A lo que puedes llamar luego:

  

Utilizando:

 {"foo":"UGLY"} 

Pruébalo aquí:

http://tryhandlebarsjs.com/

Aunque parece que no me permite guardarlo. :(

La respuesta seleccionada ya no funciona. Es una vieja pregunta, pero me costó trabajo descifrar esta simple cosa. Aquí está mi solución:

 Handlebars.registerHelper('selected', function(key, value){ return key == value? {selected:'selected'}: ''; }); 

En la versión actual del meteor, no podemos establecer atributos HTML sin valor, y el meteor no permite el uso de {{#if}} tampoco. Pero los objetos pasados ​​al ayudante se convierten en pares clave = valor y se inyectan.

ACTUALIZAR

Use UI.registerHelper lugar de Handlebars.registerHelper en nuevas (> 0.8) versiones de meteors dado que el espacio de nombres de Handlebars está depreciado ( https://github.com/meteor/meteor/wiki/Using-Blaze#handlebars-namespace-deprecated ).

Usé lo siguiente en mi proyecto (en caso de que alguien lo necesite 🙂

   

y

 Template.editApplicant.helpers({ selectedMaritalStatus: function(key){ return key == this.maritalStatus ? 'selected' : ''; } }); 

“this.maritalStatus” obtiene el estado civil del documento actual (solicitante).

Use el siguiente código para guardar el valor en la base de datos

 maritalStatus: $('#maritalStatusList').val() 

Gracias por todos ustedes ..

Tenía casi un problema idéntico, pero los valores que aprobaba eran números y creo que tengo una solución más limpia para ese caso específico, es decir, sin depender de la magia de los manubrios.

En la plantilla:

  

básicamente pasa el número del atributo que desea seleccionar con _val. Esto es útil solo en un caso donde cada opción tiene un valor numérico consecutivo. También tenga en cuenta que si nombra este atributo como ‘valor’, se sobreescribirá / ignorará por defecto, que selecciona la primera opción.

Ahora en la callback .rendered en su archivo JS:

 Template.templateName.rendered = () -> var btn_style = $('#button-style').attr('_val') $('#button-style option:nth-child(' + btn_style + ')').attr('selected', 'selected') 

Esto simplemente selecciona la opción ‘enésima’ en este campo de selección que corresponde al valor que queremos.

Hice esta función. Adáptate a tu caso

 selectedOption=function(){ selectedOpt=document.getElementById("yourTagId_Select"); var att = document.createAttribute("selected"); att.value = "selected"; idObj=Session.get("idObj"); var lib = yourCollection.find({'column._id':idObj}).fetch(); for (var i = 0; i < selectedOpt.length; i++) { if (selectedOpt[i].value==lib._id._str){ return selectedOpt[i].setAttributeNode(att); } }; } 

Después de llamar a su función

selectedOption ();