我对我的第一个应用工作使用bbjs,经过10个教程和无尽的来源我想拿出我的代码设计。
我问什么是有意见和模板的最佳实践。 另外还有一个问题的事件,我挣扎。 据我所知,该视图是负责一个元素及其内容(和其他子视图)。 对于代码是可管理的,可测试等。元素/模板是将被传递到上创建的图。 在我的应用程序恕我直言,认为应持有的模板,因为可见的元素有很多个“状态”并为每个国家不同的模板。 当状态的改变,我猜它最好创建一个新的观点,但是,是有可能的观点表示赞同新元素更新?
App.Box = Backbone.Model.extend({
defaults: function() {
return {
media: "http://placehold.it/200x100",
text: "empty...",
type: "type1"
};
}
});
App.BoxView = Backbone.View.extend({
template: {},
templates: {
"type1": template('appboxtype1'),
"type2": template('appboxtype2')
},
events: {
'click .button': 'delete'
},
initialize: function(options) {
this.listenTo(this.model, 'change', this.render);
this.listenTo(this.model, 'destroy', this.remove);
this.render();
},
render: function() {
this.template = this.templates[ this.model.get("type") ];
// first method
this.$el.replaceWith( $($.parseHTML(this.template(this))) );
this.$el.attr("id", this.model.cid);
// second method
var $t_el = this.$el;
this.setElement( $($.parseHTML(this.template(this))) );
this.$el.attr("id", this.model.cid);
$t_el.replaceWith( this.$el );
this.delegateEvents();
//$('#'+this.model.cid).replaceWith( $(g.test.trim()) );
//! on the second render the events are no longer bind, deligateEvents doesn't help
return this;
},
// get values
text: function() { return this.model.get('text'); },
media: function() { return this.model.get('media'); },
delete: function() {
this.model.destroy();
}
});
感谢名单! :)