Soy nuevo en backbone.js, y algo nuevo en el trabajo de front-end también y todavía no he descubierto cómo funciona el ciclo de vida.Ciclo de vida de una Backbone.js Ver durante su creación
Tenemos un back-end Django, que nos proporciona plantillas html, que básicamente solo utilizamos como marcos. Toda la lógica se maneja en vistas de Backbone.
El problema que tengo actualmente es que estoy tratando de dibujar un gráfico pero la función de representación gráfica no encuentra la vista basada en el ID, ya que no existe durante la función de renderizado, pero no estoy al tanto de una manera de lograr esto en una fase posterior.
He tratado de crear la vista de forma manual en la consola de cromo después de la página se haya cargado completamente y funciona:
var main = new MainView();
main.showChart();
La Vista:
var ChartView = Backbone.View.extend({
title: 'Chart',
initialize: function() {
// This assures that this refers to this exact view in each function
// (except within asynchronous functions such as jquery each)
_.bindAll(this);
// Saving parameters given by parent
this.index = this.options.index;
// Retrieve the template from server
var template = _.template(getTemplate('chart.html'));
// Compile the template with given parameters
var compiledTemplate = template({'title': this.title});
// Set the compiled template to this instance's el-parameter
this.$el.append(compiledTemplate);
// Rendering the view
this.render();
},
render: function() {
var self = this;
// Draw the graph when the page is ready
$(function(){
self.drawGraph('chart1', this.line1Data);
});
// Render function should always return the instance
return this;
},
drawGraph : function(chartId, lineData) {
Morris.Line({
element: chartId,
data: [
{y: '2012', a: 100},
{y: '2011', a: 75},
{y: '2010', a: 50},
{y: '2009', a: 75},
{y: '2008', a: 50},
{y: '2007', a: 75},
{y: '2006', a: 100}
],
xkey: 'y',
ykeys: ['a'],
labels: ['Series A']
});
},
});
donde es creado:
var chartWidgetView = new WidgetView({'contentView': new ChartView()});
this.initializeWidget(chartWidgetView);
this.$el.append(chartWidgetView.el);
Podría alguien explicar a mí:
- ¿Cómo Backbone manejar realmente la creación de un punto de vista? ¿Cuáles son las diferentes etapas?
- ¿Cómo debo manejar esta situación, p. ¿en qué punto de mi código existiría el elemento de la plantilla html para poder llamar a la función de gráficos para ello?
- ¿O mi arquitectura es fundamentalmente defectuosa? ¿Debo tratar de hacer esto de una manera completamente diferente?
Pude resolver el problema llamando explícitamente a la función de renderizado después de que ChartView se haya creado y anexado a su elemento primario: 'chartWidgetView.contentView.render();'. Gracias por la excelente visión y el enlace, definitivamente los tendré en cuenta para el futuro. Y también voy a refactorizar mi código un poco;) – jesseniem