Mithril.js:"Component template must return a virtual element, not an array, string, etc."是什么意思?

Mithril.js: What does "Component template must return a virtual element, not an array, string, etc." mean?

第一次尝试mithril.js,如果这是一个简单的问题,请见谅。我收到一条错误消息,

Component template must return a virtual element, not an array, string, etc.

当我在另一个组件中嵌套一个 map() 派生组件时。

本质上,我试图创建一个类似于以下简化示例的布局,其中地址标签派生自 ctrl.list() 道具的 .map()

<Layout>
    <Left/>
    <Right>
      <Address>
      <Address>
  </Right>
</Layout>

这是一个显示此内容的 jsfiddle。如果你自己挂载 "Right" 组件,它会很好地渲染。只有当该组件嵌套在它失败的另一个组件中时。我缺少什么,将来如何调试?

https://jsfiddle.net/uLmt9qq7/

在 Mithril v0.2.X 中,嵌套组件(即一个组件在另一个组件中)不能 return 节点数组 1: 它必须 return 具有多个子节点的单个包装节点。

由于 Right 视图中的拼写错误,您的代码似乎意外违反了该规则:

return m('.right-col'), 
  ctrl.list().map(function(addr){
    return m(Address, {addr: addr});
  })

在伪代码中,这是 return {node}, [list],其中 {node} 被丢弃,视图 return 是展开的 [list] - 这会触发错误。应该是:

return m('.right-col', 
  ctrl.list().map(function(addr){
    return m(Address, {addr: addr});
  })
)

Here's a fixed fiddle.

1重写后的Mithril v1.X, where component views can return lists of nodes directly.

不会再这样了