2015-11-30 2 views
0

Я работаю с Backbone и Dyson для имитации API. Я пытаюсь показать результаты JSON, но у меня есть ошибка: Uncaught TypeError: self.template не является функцией.Добавить JQuery с основой

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} 
+1

Вы устанавливаете 'this.template' * условно *. Другими словами, поскольку у вас есть вещи, написанные 'this.template', не гарантируется, определяется временем, когда вызывается' render'. –

ответ

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), относится к чему-то другому, кроме представления.

+0

Сначала я хочу поблагодарить вас за ответ. С вашим решением «Шаблон не определен», но если я помещу внутри Render, все работает нормально. –

+0

@JordiSalom да, это сработает, но '_.template()' нужно запускать каждый раз, когда вы вызываете метод render() ', если вы определяете свойство' template', как показано в ответе, это будет вызывается только один раз, когда создается представление. Вы можете использовать 'this.template ({})' столько раз, сколько хотите позже, не выполняя '_.template()' излишне :) –

-1

Я думаю, что вы теряете контекст, когда вы делаете

var self = this; 

Попробуйте поставить ниже код в функции инициализации.

Если вы выполните var self = this при инициализации, это будет ссылаться на объект View, но если вы сделаете это в функции, он будет отсылать функцию!

+0

Это просто неправильно. –

Смежные вопросы