我可以从外部发送 json 数据到 Mithril 路由吗
Can i send json data to Mithril route from outside
例如我有下一条 mitril 路线。
m.route.prefix("#");
m.route(document.getElementById('main'), "/", {
"/": {
render: function() {
return m('h1','Hello from root');
}
},
"/trackingController/:numbers": {
render: function(data) {
var data = JSON.parse("data");
// then work with parsed data
return m('h1', 'Hello from trackingController')
}
}
我可以从外部发送 json 数据到 trackingController 路由吗?
是的,路由可以插入参数。在您的示例中,您有一个 :numbers
参数,并且您的代码建议您期望一个 JSON 字符串。
Mithril 公开通过实体传递的数据的方式是通过 the vnode
interface's attrs
property. In the case of route components and route resolvers (like you're using here), attrs
is a map of the URL parameters。
在这个例子中,我使用 encodeURIComponent
来允许在 URL 中引入 JSON。我已经让渲染函数记录从 URI 路径接收到的解析数据并公开当前路由,以及一个文本框,您可以在其中编辑 JSON 结构并提交它以重新路由并查看新路由结果。
m.route.prefix("#");
m.route(document.getElementById('main'), "/trackingController/" + encodeURIComponent('[1,2]'), {
"/trackingController/:numbers": {
render: function(vnode) {
console.log(
'Received the following `numbers`:',
JSON.parse(vnode.attrs.numbers)
)
return [
m('h1', 'Hello from trackingController'),
m('p', 'Current route is ',
m('code', m.route.get())
),
m('form', {
onsubmit: function(e) {
e.preventDefault()
m.route.set(
"/trackingController/" +
encodeURIComponent(e.target.elements.input.value)
)
}
},
m('textarea#input', {
value: vnode.attrs.numbers,
style: {
background: '#444',
color: '#eee',
display: 'block',
padding: '1em',
},
}),
m('button', 'Go!')
),
]
}
}
})
<script src="https://unpkg.com/mithril/mithril.js"></script>
<div id=main></div>
例如我有下一条 mitril 路线。
m.route.prefix("#");
m.route(document.getElementById('main'), "/", {
"/": {
render: function() {
return m('h1','Hello from root');
}
},
"/trackingController/:numbers": {
render: function(data) {
var data = JSON.parse("data");
// then work with parsed data
return m('h1', 'Hello from trackingController')
}
}
我可以从外部发送 json 数据到 trackingController 路由吗?
是的,路由可以插入参数。在您的示例中,您有一个 :numbers
参数,并且您的代码建议您期望一个 JSON 字符串。
Mithril 公开通过实体传递的数据的方式是通过 the vnode
interface's attrs
property. In the case of route components and route resolvers (like you're using here), attrs
is a map of the URL parameters。
在这个例子中,我使用 encodeURIComponent
来允许在 URL 中引入 JSON。我已经让渲染函数记录从 URI 路径接收到的解析数据并公开当前路由,以及一个文本框,您可以在其中编辑 JSON 结构并提交它以重新路由并查看新路由结果。
m.route.prefix("#");
m.route(document.getElementById('main'), "/trackingController/" + encodeURIComponent('[1,2]'), {
"/trackingController/:numbers": {
render: function(vnode) {
console.log(
'Received the following `numbers`:',
JSON.parse(vnode.attrs.numbers)
)
return [
m('h1', 'Hello from trackingController'),
m('p', 'Current route is ',
m('code', m.route.get())
),
m('form', {
onsubmit: function(e) {
e.preventDefault()
m.route.set(
"/trackingController/" +
encodeURIComponent(e.target.elements.input.value)
)
}
},
m('textarea#input', {
value: vnode.attrs.numbers,
style: {
background: '#444',
color: '#eee',
display: 'block',
padding: '1em',
},
}),
m('button', 'Go!')
),
]
}
}
})
<script src="https://unpkg.com/mithril/mithril.js"></script>
<div id=main></div>