29 Dec Utilizando select_tag en backbone con Eco templates jst.eco.haml
En este pequeño post voy a comentar que como en muchas otras ocasiones al momento de utilizar templates de eco con haml se conflictuan los helpers de rails y muchas veces se tiene que hacer todo en html puritano, en esta ocasion necesitaba agregar un formulario de seleccion en la cual hay dos opciones para lo cual inicialmente en el formulario de alta utilice el siguiente codigo usando los helpers de rails:
= label_tag(:tipo_regimen, 'Tipo Regimen') = select_tag "tipo_regimen", "<option>Persona Fisica</option><option>Persona Moral</option>".html_safe, :class => 'form_input', :include_blank => true
Y hasta alli todo bien se mostraba para poder seleccionar entre dos opciones y se guarda correctamente en la base de datos el problema entro cuando trate de utilizar este helper en el formulario de edicion de la siguiente manera
= select_tag "tipo_regimen", options_for_select([ "Persona Fisica", "Persona Moral" ], "<%= @partner.get('tipo_regimen') %>") = select_tag "tipo_regimen", options_for_select([ "Persona Fisica", "Persona Moral" ], 'Persona Moral')
Pues en el anterior se trataba de que quedara seleccionado el que se selecciono en el formulario de alta inicial, pero el primero no lo hacia por la forma de interpretar el haml y luego el eco no sabia interpretar dicha variable y no se podia, total que tuve que pasar por el camino largo y batallozo en el cual debia de hacer algun helper pero en eco templates que funcionara e hiciera dicha funcion para lo cual aqui les dejo dicho helper para seleccionar un determinado valor de un select en eco templates haml.
%select#tipo_regimen{:name => "tipo_regimen"} <% for val in ['Persona Fisica', 'Persona Moral']: %> <% if val is @partner.get('tipo_regimen'):%> %option{:value => "<%= val %>", :selected => 'selected'} <%= val %> <% else:%> %option{:value => "<%= val %>"} <%= val %> <% end %> <% end %>
Solo tengan cuidado con los espacios(haml), indentacion correctamente, en caso de que encuentren una mejor opcion para realizarlo todos los comentarios son bien recibidos.
Despues de una mejora de refactorizacion cree un nuevo template con el siguiente contenido:
%select{:name => "<%= @field%>"} <% for val in @options: %> <% if val is @selected:%> %option{:value => "<%= val %>", :selected => 'selected'} <%= val %> <% else:%> %option{:value => "<%= val %>"} <%= val %> <% end %> <% end %>
Y desde mi formulario de edicion lo mando llamar de la siguiente forma y le paso lo parametros que requiero para de esta forma poder reutilizar este template en cualquier otro formulario donde ocupe tener esta misma funcionalidad
<%- JST['templates/partners/select_edit_form'](options: ['Persona Fisica', 'Persona Moral'], selected: @partner.get('tipo_regimen'), field: 'tipo_regimen') %>
donde options es la lista de elementos a seleccionar en el select y el selected es el valor que actualmente quieren se mantenga seleccionado y field es el campo de su base de datos que van a actualizar cuando utilizen este formulario, de esta forma lo podemos hacer mas estandar para todos nuestros formularios con edicion de selects.
No Comments