2011-08-12 18 views
7

Estoy tratando de construir una aplicación de editor de contactos simple en Backbone.js y me he encontrado con un problema que no sé cómo resolver porque todavía no estoy familiarizado con Backbone.js.¿Cómo puedo mostrar una lista de selección (menú desplegable) para una propiedad de modelo en BackboneJS?

Tengo un modelo Contact y ese artículo tiene un campo ProductLineID (cada contacto tiene una línea de productos a la que está asociado). Al mostrar el editor de este contacto, me gustaría mostrar una lista desplegable con las posibles opciones de la línea de producto y preestablecer el valor actual. ¿Cómo haría eso en Backbone.js?

sé cómo hacerlo en knockout.js con-enlace de datos:

<select id="ProductLineID" name="ProductLineID" 
     data-bind="options: productLineOptions, 
     optionsValue: 'ID', 
     optionsText: 'Name', 
     value: ProductLineID, 
     optionsCaption: 'All'"> 
</select> 

En este ejemplo productLineOptions es un objeto JSON que ya está precargado en la página.

Eso lograría exactamente lo que quiero, pero no sé cómo hacer el equivalente en Backbone.js.

Puedo proporcionar más código de mi ejemplo real, pero parece un ejemplo un tanto trivial y no requiere un código específico.

+0

¿Lo logra? ¿Cómo se las arregló para mostrar 'Valor seleccionado por defecto', es decir' value: ProductLineID' ?? – Shubh

Respuesta

13

algo como lo siguiente funcionaría si utilizó el underscore templates:

<select id="ProductLineID" name="ProductLineID"> 
    <option value="">--select a product line--</option> 
    <% _(productLineOptions).each(function(pl) { %> 
     <option value="<%= pl.ID %>"><%= pl.Name %></option> 
    <% }); %> 
</select> 

Y entonces usted tendría que asegurarse de que ha aprobado en el objeto en productLineOptions contexto de la plantilla.

+0

¿hay alguna manera de combinar esto con la representación integrada de una vista en la red troncal? – samandmoore

+1

El renderizado de la vista incorporada del Backbone no hace nada, literalmente. Entonces podría hacer algo como: (1) poner lo anterior en una plantilla (2) en su función 'render' llamar a la plantilla con el contexto correcto' render: function() {this.template ({productLineOptions: productLineOptions}); devuelve esto; } ' – satchmorun

+0

Recibí otro problema cuando agregué el atributo 'seleccionado' en la plantilla, pero siempre seleccionó el primero, incluso si se seleccionó otra opción. – Kyleinincubator

4

Backbone.js no hace databinding de la caja, como lo hace Knockout. Deja ese aspecto al desarrollador para que haga lo que desee. La forma básica es configurar los oyentes de eventos para los cambios.

Si desea hacer un enlace de datos estilo knock-out, hay un proyecto que puede admitir lo que necesita.

https://github.com/derickbailey/backbone.modelbinding

+0

Entiendo que la red troncal no proporciona el mismo tipo de funcionalidad de vinculación de datos en línea, pero ¿hay alguna forma sugerida de lograr lo mismo utilizando la red troncal? Probablemente voy a probar el plugin de encuadernación con modelos, pero para mí esa no es una forma verdaderamente "vertebral" de lograrlo. – samandmoore

Cuestiones relacionadas