Skip to content

Instantly share code, notes, and snippets.

@tobyzerner
Created April 8, 2015 02:38
Show Gist options
  • Save tobyzerner/da3ddbadbc8c20891bb3 to your computer and use it in GitHub Desktop.
Save tobyzerner/da3ddbadbc8c20891bb3 to your computer and use it in GitHub Desktop.

Revisions

  1. tobyzerner created this gist Apr 8, 2015.
    37 changes: 37 additions & 0 deletions app.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,37 @@
    import Component from './component';

    class Widget extends Component {
    init(ctrl) {
    var props = this.props;

    ctrl.counter = props.initialValue;

    ctrl.increment = function() {
    ctrl.counter++;
    }
    ctrl.reset = function() {
    ctrl.counter = props.initialValue;
    }
    }
    view(ctrl) {
    return m('div', [
    m('h1', 'This widget is set up for: '+this.props.name),
    m('p', 'Counter: '+ctrl.counter),
    m('button', {onclick: ctrl.increment}, 'Increment Counter')
    ])
    }
    }

    class IndexPage extends Component {
    init(ctrl) {
    ctrl.widget = new Widget({name: 'foo', initialValue: 2}).instance()
    }
    view(ctrl) {
    return m('div', [
    ctrl.widget.render(),
    m('button', {onclick: ctrl.widget.reset}, 'Reset Counter')
    ]);
    }
    }

    m.mount(document.body, new IndexPage());
    25 changes: 25 additions & 0 deletions component.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,25 @@
    export default class Component {
    constructor(props) {
    this.props = props || {};

    var component = this;
    this.controller = function() {
    var ctrl = {};
    component.init(ctrl);
    return ctrl;
    };
    this.controller.$original = this.init;
    }

    init(ctrl) {
    }

    instance() {
    var component = this;
    var controller = new this.controller();
    controller.render = function() {
    return component.view(controller);
    };
    return controller;
    }
    }