(function(){var e,t,n,r,i={}.hasOwnProperty;t=typeof exports!="undefined"&&exports!==null?exports:this,t.bko||(t.bko={}),e=t.bko,n=function(e,t){var n,r,s,o;r=function(e,t,n){return e.listenTo(t,"change:"+n,function(t,r,i){return e[n](r)})},s=e.attributes,o=[];for(n in s){if(!i.call(s,n))continue;o.push(r(t,e,n))}return o},r=function(e,t){var n,r,s;r=function(e,t,n){if(n!=="__ko_mapping__"&&e[n].subscribe)return e[n].subscribe(function(e){return t.set(n,e)})},s=[];for(n in e){if(!i.call(e,n))continue;if(n==="__ko_mapping__")continue;e[n].subscribe?s.push(r(e,t,n)):s.push(void 0)}return s},e.model2viewmodel=function(e,t){var i,s;return i=e.toJSON(),s=ko.mapping.fromJS(i),_.extend(s,Backbone.Events),n(e,s),r(s,e),s},e.View=Backbone.View.extend({constructor:function(){return Backbone.View.apply(this,arguments),this.viewmodel=this.options.viewmodel||this.viewmodel||null,this._ko_bound=null,this._ko_viewmodel=null},initialize:function(){Backbone.View.prototype.initialize.apply(this,arguments);if(this.model||this.viewmodel)return this._setModel(this.model,this.viewmodel)},setElement:function(e,t){return this._ko_removeBinding(),Backbone.View.prototype.setElement.apply(this,arguments),this.el&&this.viewmodel&&this._ko_setBinding(),this},setModel:function(e,t){return e===this.model?this:this._setModel(e,t)},_setModel:function(t,n){return this.model=null,this.viewmodel=null,this.model=t,this.viewmodel=n,this.viewmodel||(this.viewmodel=e.model2viewmodel(this.model)),this._ko_setBinding(),this},_ko_removeBinding:function(){return this._ko_bound&&(ko.cleanNode(this._ko_bound),this._ko_bound=null,this._ko_viewmodel=null),this},_ko_setBinding:function(){if(this.el&&this.viewmodel&&this.viewmodel!==this._ko_viewmodel)ko.applyBindings(this.viewmodel,this.el),this._ko_bound=this.el,this._ko_viewmodel=this.viewmodel;else if(!this.el||!this.viewmodel)this._ko_bound=null,this._ko_viewmodel=null;return this}})}).call(this)