私は backbone.js が初めてで、フロントエンドの作業もやや初めてで、ライフサイクルがどのように機能するかをまだよく理解していません。
基本的にフレームとしてのみ使用するhtmlテンプレートを提供するDjangoバックエンドがあります。すべてのロジックはバックボーン ビューで処理されます。
私が現在抱えている問題は、グラフを描画しようとしているが、レンダリング機能中に存在しないため、グラフ機能が 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);
誰かが私に明確にすることができますか:
- バックボーンは実際にビューの作成をどのように処理しますか? さまざまな段階とは何ですか?
- この状況をどのように処理すればよいでしょうか。たとえば、コードのどの時点で html テンプレートの要素が存在し、グラフ関数を呼び出すことができるでしょうか?
- それとも私のアーキテクチャに根本的な欠陥があるのでしょうか? まったく別の方法でこれを行う必要がありますか?