|
|
@@ -36,24 +36,29 @@
|
|
|
|
|
|
_ws.makeView = function(elemId, props) {
|
|
|
var v = {};
|
|
|
- props = props || {};
|
|
|
+ v.props = props || {};
|
|
|
|
|
|
v.$elem = $('#' + elemId);
|
|
|
v.partName = _.camelCase(elemId);
|
|
|
_ws.ui[v.partName] = v;
|
|
|
|
|
|
// Assign a default render function if none given
|
|
|
- if(! props.render) {
|
|
|
+ if(! v.props.render) {
|
|
|
var $tmplEl = $('script[data-tmpl-for="' + elemId + '"]');
|
|
|
v.tmpl = $tmplEl.html();
|
|
|
v.render = (function(data) {
|
|
|
- var eventBinder = eventBinders[v.partName];
|
|
|
- this.$elem.html( Mustache.render( this.tmpl, data ) );
|
|
|
- if(eventBinder) {
|
|
|
- eventBinder = eventBinder.bind(this);
|
|
|
- console.log('bind events for', v.partName);
|
|
|
- eventBinder();
|
|
|
+ if(! data) {
|
|
|
+ console.log('WARNING! You should provide data for #' + elemId + "'s render()");
|
|
|
}
|
|
|
+ // var eventBinder = eventBinders[v.partName];
|
|
|
+ this.$elem.html( Mustache.render( this.tmpl, data ) );
|
|
|
+ // if(eventBinder) {
|
|
|
+ // eventBinder = eventBinder.bind(this);
|
|
|
+ // console.log('bind events for', v.partName);
|
|
|
+ // eventBinder();
|
|
|
+ // }
|
|
|
+ console.log('rebind events after render', this);
|
|
|
+ this.bindEvents();
|
|
|
}).bind(v);
|
|
|
}
|
|
|
// Otherwise bind the provided one
|
|
|
@@ -62,15 +67,22 @@
|
|
|
}
|
|
|
|
|
|
// Set event handlers
|
|
|
- if(props.events) {
|
|
|
- for(var descriptor in props.events) {
|
|
|
- var handler = props.events[descriptor];
|
|
|
- var bits = descriptor.split(' ');
|
|
|
- var evtName = bits.shift();
|
|
|
- var selector = bits.join(' ');
|
|
|
- console.log('#### bind', descriptor, 'e:' + evtName, 's:' + selector, handler.toString())
|
|
|
- v.$elem.on(evtName, handler);
|
|
|
- }
|
|
|
+ if(v.props.events) {
|
|
|
+ v.bindEvents = (function() {
|
|
|
+ var events = this.props.events;
|
|
|
+ for(var descriptor in events) {
|
|
|
+ var handler = events[descriptor];
|
|
|
+ var bits = descriptor.split(' ');
|
|
|
+ var evtName = bits.shift();
|
|
|
+ var selector = bits.join(' ');
|
|
|
+ console.log('#### bind', descriptor, 'e:' + evtName, 's:' + selector, handler.toString())
|
|
|
+ v.$elem.find(selector).on(evtName, handler);
|
|
|
+ }
|
|
|
+ }).bind(v);
|
|
|
+ v.bindEvents();
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ v.bindEvents = function() {};
|
|
|
}
|
|
|
}
|
|
|
|