underscore template que examples backbonejs backbone.js render

template - Backbone.js desactivando wrap por div en render



underscore js que es (3)

Tengo postes modelo de publicación y colección. Y quiere hacer una forma con la lista de todas las publicaciones en <select id="multi" multiple="multiple"> . Así que tengo que hacer un renderizado PostView dentro de mi #multi con solo esta plantilla:

<option value=""><%= title %></option>

Pero finalmente lo envuelvo con div. ¿Hay alguna solución para no envolver esta plantilla con <div> ?



Si no define un el (o tagName) para la vista (en la clase o durante la creación de instancias), la vista se colocará dentro de una etiqueta div. http://documentcloud.github.com/backbone/#View-el

var PostView = Backbone.View.extend({ tagName: ''option'' });

ACTUALIZAR

Comenzando v0.9.0, Backbone tiene view.setElement (elemento) para hacer esto.

var PostView = Backbone.View.extend({ initialize: function() { var template = _.template(''<option value=""><%= title %></option>''); var html = template({title: ''post''}); this.setElement(html); } });


Si no desea que la vista ajuste su HTML, deberá hacer algunas cosas:

  1. Reemplace this.el completo
  2. Llame a delegateEvents en el nuevo el

render: function(){ var html = "some foo"; this.el = html; this.delegateEvents(this.events); }

Como Backbone genera una div u otra etiqueta (en función de su configuración de tagName para la vista), debe reemplazarla por completo. Eso es fácil de hacer. Sin embargo, cuando haces eso, pierdes tus eventos declarados porque Backbone usa el delegate de jQuery debajo del capó para conectarlos. Para volver a habilitar tus eventos declarados, llama a delegateEvents y pasa tus declaraciones de eventos.

El resultado es que su view.el será la etiqueta <option> que desee, y nada más.