3rd Party Integration
- Getting Started
- Resources
- Key concepts
- Social
- Misc
Integration with third party libraries or vanilla javascript code can be achieved via lifecycle methods.
Example
var FullCalendar = {
    oncreate: function (vnode) {
        console.log('FullCalendar::oncreate')
        $(vnode.dom).fullCalendar({
            // put your initial options and callbacks here
        })
        Object.assign(vnode.attrs.parentState, {fullCalendarEl: vnode.dom})
    },
    // Consider that the lib will modify this parent element in the DOM (e.g. add dependent class attribute and values).
    // As long as you return the same view results here, mithril will not
    // overwrite the actual DOM because it's always comparing old and new VDOM
    // before applying DOM updates.
    view: function (vnode) {
        return m('div')
    },
    onbeforeremove: function (vnode) {
        // Run any destroy / cleanup methods here.
        //E.g. $(vnode.state.fullCalendarEl).fullCalendar('destroy')
    }
}
m.mount(document.body, {
    view: function (vnode) {
        return [
            m('h1', 'Calendar'),
            m(FullCalendar, {parentState: vnode.state}),
            m('button', {onclick: prev}, 'Mithril Button -'),
            m('button', {onclick: next}, 'Mithril Button +')
        ]
        function next() {
            $(vnode.state.fullCalendarEl).fullCalendar('next')
        }
        function prev() {
            $(vnode.state.fullCalendarEl).fullCalendar('prev')
        }
    }
})
Running example flems: FullCalendar
License: MIT. © Leo Horie.