Use mithril views to render server side
npm install mithril-node-render
// Make Mithril happyif(!global.window){global.window=global.document=global.requestAnimationFrame=undefined}varm=require('mithril')varrender=require('mithril-node-render')render(m('span','huhu')).then(function(html){// html === '<span>huhu</span>'})varhtml=render.sync(m('span','huhu'))// html === '<span>huhu</span>'As you see the rendering is asynchronous. It lets you await certain data from within oninit hooks.
varmyAsyncComponent={oninit: function(node,waitFor){waitFor(newPromise(function(resolve){node.state.foo='bar'resolve()}))},view: function(node){returnm('div',node.state.foo)}}render(myAsyncComponent).then(function(html){// html === '<div>bar</div>'})You can also render synchronously. You just don't get the waitFor callback.
varmyAsyncComponent={oninit: function(node,waitFor){// waitFor === undefinednewPromise(function(resolve){node.state.foo='bar'resolve()})},view: function(node){returnm('div',node.state.foo)}}varhtml=render.sync(myAsyncComponent)// html === '<div>bar</div>'Optionally pass in options as an object: render(component, options).
The following options are supported:
escapeAttribute(value)Default: render.escapeAttribute
A filter function for attribute values. Receives value, returns what is printed.
escapeText(value)Default: render.escapeText
A filter function for string nodes. Receives value, returns what is printed.
strictDefault: false
Set this to true to close all empty tags automatically. Default is standard HTML mode where tags like <br> and <meta> are allowed to implicitly close themselves. This should be set to true if you're rendering XML-compatible HTML documents.
xmlDefault: false
Set this to true to render as generic XML instead of (possibly XML-compatible) HTML. Default is HTML mode, where children of void elements are ignored. This implies strict: true.
- Blog post about isomorphic mithril applications
- Usage Example