Use mithril views to render server side
npm install mithril-node-render
// use a mock DOM so we can run mithril on the server
require('mithril/test-utils/browserMock')(global);
var m = require('mithril');
var render = require('mithril-node-render');
render(m('span', 'huhu')).then(function (html) {
// html === '<span>huhu</span>'
})
As you see the rendering is asynchron. It waits for resolve of all promises
that might get returned from oninit
callbacks.
myAsyncComponent = {
oninit: function (node) {
return new Promise(function (resolve) {
node.state.foo = 'bar'
resolve()
})
},
view: function (node) {
return m('div', node.state.foo)
}
}
// usage
render(myAsyncComponent).then(function (html) {
// html === '<div>bar</div>'
}
Optionally pass in options as an object: m.render(component, options)
.
The following options are supported:
escapeAttributeValue(value)
Default: render.escapeHtml
A filter function for attribute values. Receives value, returns what is printed.
escapeString(value)
Default: render.escapeHtml
A filter function for string nodes. Receives value, returns what is printed.
strict
Default: false
Set this to true to close all empty tags automatically. Default is HTML mode where tags like <br>
and <meta>
are allowed without closing tags. This is required if you're rendering XML or XHTML documents.
- Blog post about isomorphic mithril applications
- Usage Example