'use strict'; define( ['backbone.modelbinder'], function (ModelBinder) { return function () { var originalOnRender = this.prototype.onRender; var originalBeforeClose = this.prototype.onBeforeClose; this.prototype.onRender = function () { if (!this.model) { throw 'View has no model for binding'; } if (!this._modelBinder) { this._modelBinder = new ModelBinder(); } var options = { changeTriggers: {'': 'change typeahead:selected typeahead:autocompleted', '[contenteditable]': 'blur', '[data-onkeyup]': 'keyup'} }; this._modelBinder.bind(this.model, this.el, null, options); if (originalOnRender) { originalOnRender.call(this); } }; this.prototype.onBeforeClose = function () { if (this._modelBinder) { this._modelBinder.unbind(); delete this._modelBinder; } if (originalBeforeClose) { originalBeforeClose.call(this); } }; return this; }; } );