我是backbone.js 的新手,对前端工作也有些陌生,还没有完全弄清楚生命周期是如何工作的。
我们有一个 Django 后端,它为我们提供了 html 模板,我们基本上只将其用作框架。所有逻辑都在 Backbone 视图中处理。
我目前遇到的问题是我正在尝试绘制图形,但绘图函数没有找到基于 id 的视图,因为它在渲染函数期间不存在,但我不知道有一种方法可以在以后的阶段实现这一点。
页面完全加载后,我尝试在 Chrome 控制台中手动创建视图并且它可以工作:
var main = new MainView();
main.showChart();
风景:
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']
});
},
});
创建位置:
var chartWidgetView = new WidgetView({'contentView': new ChartView()});
this.initializeWidget(chartWidgetView);
this.$el.append(chartWidgetView.el);
有人可以向我澄清一下:
- Backbone 如何实际处理视图的创建?有哪些不同的阶段?
- 我应该如何处理这种情况,例如,html 模板中的元素会在我的代码的哪一点存在,以便我可以为它调用绘图函数?
- 还是我的架构存在根本缺陷?我应该尝试以完全不同的方式做到这一点吗?