framework/js/lib/component.js
Toby Zerner dbf6a043a6 Automatically hook up onload/config functions
So that every component's DOM can be config'd by extensions
2015-05-14 22:41:06 +09:30

65 lines
1.1 KiB
JavaScript

/**
*/
export default class Component {
/**
*/
constructor(props) {
this.props = props || {};
this.element = m.prop();
}
/**
*/
$(selector) {
return selector ? $(this.element()).find(selector) : $(this.element());
}
onload(element) {
this.element(element);
}
config() {
}
/**
*/
static component(props) {
props = props || {};
if (this.props) {
props = this.props(props);
}
var view = function(component) {
component.props = props;
var vdom = component.view();
vdom.attrs = vdom.attrs || {};
if (!vdom.attrs.config) {
vdom.attrs.config = function() {
var args = [].slice.apply(arguments);
if (!args[1]) {
component.onload.apply(component, args);
}
component.config.apply(component, args);
}
}
return vdom;
};
view.$original = this.prototype.view;
var output = {
props: props,
component: this,
controller: this.bind(undefined, props),
view: view
};
if (props.key) {
output.attrs = {key: props.key};
}
return output;
}
}