Mithril.js:两个子组件是否应该通过父组件的 Controller 相互通信?

标签 mithril.js

我在寻找执行以下操作的正确方法时遇到了困难。我有一个带有两个子组件的父组件(请参阅下面的简化代码)。我想知道 ChildA 在按下按钮时“调用”ChildB 的正确方法。他们应该通过 parent 沟通,但他们应该通过他们的 Controller 沟通吗?在这种情况下,父级必须将其 Controller 传递给子级的 Controller 。

Parent = {
  view: function () {
    m.component(ChildA);
    m.component(ChildB);
  }
}

ChildA = {
  view: function () {
    m('button')
  }
}

ChildB = {
  view: function () {
  }
}

最佳答案

这实际上只是您喜欢的普通 javascript 样式的问题。想想 JS 对象之间的通信以及您将如何处理它。

通常,Mithril 开发者会在Parent/Child 通信和Pub/Sub 之间做出选择。对于父/子, Controller 通常是开发人员放置逻辑的地方。 m.component 接受多个参数,您可以在其中将引用(数据/状态/逻辑)传递给子组件。 See the docs .无需将父 Controller 传递给子 Controller 。

但是,我更喜欢创建一个位于任何组件之外的view-model。这是我保存 View 状态(即表单数据)和 View 逻辑(即事件、UI 相关回调和组件之间的共享状态)的地方。这样,当我不可避免地更改/添加组件时,我将不必在每个组件中重新编写 Controller 逻辑。

Leo Horie, Mithril 的作者,wrote an article他在其中解释了 parent 与一个 child 之间的沟通,但这可以毫不费力地应用于多个 child 。

Pub/Sub 是一种常见的 JS 习惯用法。 Mithril wiki 列出了一些处理此问题的社区贡献。转到 the wiki ,打开标题为“所有主题”的页面,然后对“pub”进行正常的页面搜索。您会在那里发现一些选项。根据您应用的复杂程度,您的下一步可能是通过谷歌搜索 Pub/Sub 库。

关于Mithril.js:两个子组件是否应该通过父组件的 Controller 相互通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31964544/

相关文章:

javascript - Mithril 避免重新加载图像

javascript - 使用 Mithril 在运行时创建新元素

javascript - 无法获取 Mithril 中的响应内容

jquery - Mithril 和 jQuery 如何相互交互?

javascript - Mithril 组件组合中单独单击增量按钮

javascript - 获取 Mithril 中 HTML 标签的 NodeList

mithril.js - 如何在 Mithril 中集成自定义上下文菜单

mithril.js - Mithril 需要导入 'mithril'

javascript - 如何使用 JSON 源创建 Mithril.js SPA?