Given the following HTML
<div id="outer">
<div id="innerA"></div>
<div id="innerB"></div>
<div id="innerC"></div>
</div>
Should a View's render method update each element individually, ignoring the parent (outer) div:
MyView = Backbone.View.extend({
model: null,
initialize: function(options) {
var self = this;
this.model = options.model;
_.bindAll(this, 'render');
this.model.bind('change', this.render);
},
render: function() {
var self = this;
$('#innerA').html(this.model.get('A'));
$('#innerB').html(this.model.get('B'));
$('#innerC').html(this.model.get('C'));
},
});
Or should it write HTML and values:
MyView = Backbone.View.extend({
el: '#outer',
model: null,
initialize: function(options) {
var self = this;
this.model = options.model;
_.bindAll(this, 'render');
this.model.bind('change', this.render);
},
render: function() {
var self = this;
var element = jQuery(this.el);
element.html('');
element.append('<div id="innerA">' + this.model.get('A') + '</div>');
element.append('<div id="innerB">' + this.model.get('B') + '</div>');
element.append('<div id="innerC">' + this.model.get('C') + '</div>');
return this.el;
},
});
Or should it create nested models and views to delegate rendering:
MyView = Backbone.View.extend({
model: null,
initialize: function(options) {
var self = this;
this.model = options.model;
_.bindAll(this, 'render');
this.model.bind('change', this.render);
},
render: function() {
var self = this;
var modelA = new ModelA();
modelA.set({
value: this.model.get('A'),
});
var viewA = new ViewA({
model: modelA
});
// Assume ViewA renders '<div id="innerA"></div>'
$('#innerA').html(viewA.render().html());
// Rinse and repeat for B and C.
},
});