我已经将render()
我的 View 上的方法分成两个单独的方法,以便让我渲染整个 View,或者只是 View 的一小部分,它由 HTML 表单表示。这两种render()
方法看起来像这样:
render: function () {
var templateData = _.extend({}, this.model.attributes, localizedText),
compiledLoadStopTemplate = Handlebars.compileClean(template);
this.isClosed = false;
this.triggerMethod("before:render", this);
this.triggerMethod("item:before:render", this);
this.$el.html(compiledLoadStopTemplate(JSON.parse(JSON.stringify(templateData))));
this.renderAppointmentForm();
this.bindUIElements();
this.showStatusNotification();
this.triggerMethod("render", this);
this.triggerMethod("item:rendered", this);
return this;
},
renderAppointmentForm: function () {
var templateData = _.extend({}, this.model.attributes, localizedText, { notification: this.notification }),
compiledAppointmentFormTemplate = Handlebars.compileClean(appointmentFormTemplate);
this.triggerMethod("before:render", this);
this.triggerMethod("item:before:render", this);
this.$el.find(".hook-appointment-form-container").html(compiledAppointmentFormTemplate(JSON.parse(JSON.stringify(templateData))));
this.bindUIElements();
this.showStatusNotification();
this.triggerMethod("render", this);
this.triggerMethod("item:rendered", this);
return this;
},
现在,这里显然有一大堆重复的代码;虽然模板数据、模板和实际html()
调用是唯一的,但它们之间几乎所有其他行都是通用的。
最好有一个包装的方法,它可以让我提供模板数据、编译的模板和html()
行,并自动将其余的其他前/后触发方法通用,但我无法设计使用下划线的方法wrap()
确实有效。
我确信有一个更高级的编程概念可以完美地满足这种需求,但它现在正在避免我的掌握。