2011-10-25 11 views
22

Ho post di modello e post di raccolta. E voglio fare la forma con la lista di tutti i post in <select id="multi" multiple="multiple">. Quindi devo fare un postview rendere dentro il mio # Multi proprio con questo modello:Backbone.js che disattiva l'involucro di rendering nel rendering

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

Ma alla fine ho capito avvolto con div. C'è qualche soluzione per non avvolgere questo modello con <div>?

risposta

32

Se non si definisce el (o tagName) per la vista (nella classe o durante l'istanziazione) la vista verrà inserita all'interno di un tag div. http://documentcloud.github.com/backbone/#View-el

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

UPDATE

v0.9.0 partenza, Backbone ha view.setElement (elemento) per ottenere questo fatto.

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

Ho provato anche questo approccio, ma non riesco a vedere un modo per passare la variabile per "valore" all'interno di questo tag . Qualche idea? – BazZy

+0

All'interno della tua vista puoi usare jquery per impostare il valore '$ (this.el) .attr ('value', 'something');' – kreek

+4

o anche 'this.el.value = 'something'' lascia jQuery per dove è necessario :) –

18

Se non si desidera avere la vista avvolgere il vostro HTML, dovrete fare un paio di cose:

  1. Sostituisci this.el interamente
  2. chiamata delegateEvents sul nuovo el
render: function(){ 
    var html = "some foo"; 
    this.el = html; 
    this.delegateEvents(this.events); 
} 

Dal Backbone genera un div o altro tag (in base all'impostazione tagName per la vista), è necessario sostituirlo interamente. È facile da fare. Quando lo fai, però, perdi gli eventi dichiarati perché Backbone usa il delegate di jQuery per collegarli. Per riattivare gli eventi dichiarati, chiama delegateEvents e passa le dichiarazioni degli eventi.

Il risultato è che il tuo view.el sarà il tag <option> che desideri e niente di più.

+0

Grazie mille per il tuo aiuto, Derick. Userò il tuo consiglio nei miei progetti futuri/ – BazZy

+0

non è necessario passare questo.eventi a delegareEventi, verrà impostato come predefinito. – troynt

+8

c'è una funzione per questo nell'ultima versione di BB - [view.setElement (html)] (http://documentcloud.github.com/backbone/#View-setElement) – zihotki

Problemi correlati