Szablon wygląda następująco.przy przekazywaniu zmiennej do szablonu szkieletu, jak odwoływać się do niej w szablonie?
<div>
<H5>Status for your request</H5>
<table>
<tbody>
<tr>
<th>RequestId</th>
<th><%=id%></th>
</tr>
<tr>
<th>Email</th>
<th><%=emailId%></th>
</tr>
<tr>
<th>Status</th>
<th><%=status%></th>
</tr>
</tbody>
</table>
</div>
To jest widok JavaScript, który renderuje stronę.
window.StatusView = Backbone.View.extend({
initialize:function() {
console.log('Initializing Status View');
this.template = _.template(tpl.get('status'));
},
render:function (eventName) {
$(this.el).html(this.template());
return this;
},
events: { "click button#status-form-submit" : "getStatus" },
getStatus:function(){
var requestId = $('input[name=requestId]').val();
requestId= $.trim(requestId);
var request = requests.get(requestId);
var statusTemplate = _.template(tpl.get('status-display'));
var statusHtml = statusTemplate(request);
$('#results-span').html(statusHtml);
}
});
gdy kliknie na wejściu, requestId jest odczytywany i stan ten jest dołączony do elementu html o identyfikatorze „Wyniki rozpiętości”.
Błąd występuje podczas zamiany wartości w szablonie html na wartości zmiennych.
var statusTemplate = _.template(tpl.get('status-display'));
var statusHtml = statusTemplate(request);
Renderowanie kończy się niepowodzeniem z następującym błędem.
Uncaught ReferenceError: emailId is not defined
(anonymous function)
_.templateunderscore-1.3.1.js:931
window.StatusView.Backbone.View.extend.getStatusstatus.js:34
jQuery.event.dispatchjquery.js:3242
jQuery.event.add.elemData.handle.eventHandle
Dziękuję za wskazówki. Zamiast przekazać model Szkielet, przekazałem czysty obiekt javascript, który jest tworzony z modelu. 'var data = {id: request.get ('id'), emailId: request.get ('emailId'), status: request.get ('status')};'. Teraz szablon renderuje to dobrze. Jaka jest różnica między modelem BackBone a czystym obiektem JS? – Nambi
@Nambi: Widoki zazwyczaj wyświetlają modele lub kolekcje w szkielecie, a ten model lub kolekcja znajduje się w ['this.model' lub' this.collection'] (http://documentcloud.github.com/backbone/#View-constructor) .Następnie przetłumaczysz model/kolekcję na zwykłą strukturę danych JavaScript, używając metody ['toJSON'] (http://documentcloud.github.com/backbone/#Model-toJSON). Jeśli 'request' jest modelem typu Backbone, twoje' var data = {...} 'jest takie samo jak' var data = request.toJSON() 'z tym wyjątkiem, że' toJSON' będzie zawierał wszystkie atrybuty 'request'. Szablon się troszczy, chce tylko obiektu z odpowiednimi klawiszami. –