我正在使用Backbone和Dyson来模拟API。我尝试显示JSON的结果,但我有错误:未捕获TypeError:self.template不是函数。
ReservaCollectionView = Backbone.View.extend({
initialize: function () {
if (Session.get('authenticated') && Session.get('authenticated') !== false) {
this.template = _.template($('#divReservaTpl').html(), {});
//Vector donde almacenamos las subvistas que corresponden a las reservas
this.subViewsReservas = [];
//Instancia de la vista de la paginación
this.paginacionVista = new PaginacionReservasView({
collection: this.collection,
el: '.paginacionReservas',
reservasPagina: 5,
});
//Instancia de la vista del buscador (simulamando los datos del servidor que corresponden a la colección oficinas )
this.buscadorVista = new BuscadorView({
el: 'div.buscador-reservas',
collection: new OficinasCollection(oficinas),
});
}
else {
}
},
render: function () {
var self = this;
//var fragment = document.createDocumentFragment();
self.$('.contenedor-reservas').empty();
self.collection.each(function (reserva, index) {
console.log(reserva);
console.log(index);
self.$('.contenedor-reservas').append(self.template({'data': reserva.toJSON()}));
});
this.collection.each(function (reserva, index) {
self.subViewsReservas.push(new ReservaView({
el: '#' + reserva.get('Idreserva'),
model: reserva
}));
});
this.collection.each(function (reserva, index) {
//Limite de la paginacion 5 limite arbitrario
if (index < 5) {
//Lo Marcamos como visible y actualiazamos la paginación
self.collection.get(reserva.get('Idreserva')).set({'Visibilidad': true});
}
});
this.paginacionVista.render();
return this;
},
});
reservaJSON()的值:
{"Idreserva":"1","Idcliente":403,"Idtarifa":3,"Idgrupo":3,"Bono":"WG5000218E","BonoAgencia":"7741124","Fecha":"2015-02-17 11:49:09","Dropoffdate":"2015-02-17 11:49:09","Pickupdate":"2015-02-17 11:49:09","Grupo":"XXX","reserva_status":3,"Estado":3,"status":true}
答案 0 :(得分:1)
可能发生这种情况的一种情况是条件
if (Session.get('authenticated') && Session.get('authenticated') !== false)
失败。
在这种情况下,this.template = _.template($('#divReservaTpl').html(), {});
将无法执行,template
属性将不会出现在视图中。
我建议在视图定义中使用template属性,如文档中所示:
ReservaCollectionView = Backbone.View.extend({
initialize: function ()
},
template: _.template($('#divReservaTpl').html()),
render: function(){}
});
然后,您可以根据条件安全地选择是否render
视图。
可能发生此错误的另一种情况是render
方法执行的上下文(this
)引用除视图之外的其他内容。
答案 1 :(得分:-1)
当你做
时,我认为你正在失去上下文var self = this;
尝试将下面的代码放在初始化函数中。
如果你在初始化中执行var self = this,这将引用对象View,但是如果你在函数中执行它,它将引用该函数!