Mithril.js:两个子组件应该通过父母的控制器相互通信吗?

Ber*_*ute 2 mithril.js

我有点卡住寻找正确的方法来做以下事情.我有一个包含两个子组件的父组件(请参阅下面的简化代码).我想知道ChildA按下按钮时"调用" 的正确方法ChildB.他们应该通过父母沟通,但他们应该通过他们的控制器进行沟通吗?在这种情况下,父母必须将其控制器传递给孩子的控制者.

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

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

ChildB = {
  view: function () {
  }
}
Run Code Online (Sandbox Code Playgroud)

pel*_*lón 5

这只是你喜欢的普通javascript风格的问题.想想JS对象之间的通信以及如何处理它.

通常,秘银开发者选择父/子通信和发布/订阅.对于父/子,控制器通常是开发人员放置逻辑的地方.m.component接受多个参数,您可以在其中将引用(数据/状态/逻辑)传递给子组件.查看文档.没有必要将父控制器传递给子级.

但是,我更喜欢创建一个生活在任何一个组件之外的视图模型.这是我保持视图状态(即表单数据)和视图逻辑(即事件,UI相关回调和组件之间的共享状态)的地方.这样,当我不可避免地更改/添加组件时,我不必重新编写每个组件中的控制器逻辑.

Mithril的作者Leo Horie 撰写了一篇文章,其中解释了父母和一个孩子之间的交流,但这可以毫不费力地应用于多个孩子.

Pub/Sub是一种常见的JS习语.秘银维基列出了一些处理此问题的社区贡献.转到维基,打开标题为"所有主题"的页面,并对"pub"执行常规页面搜索.你会发现那里的一些选择.根据应用程序的复杂程度,您的下一步可能是通过谷歌搜索Pub/Sub库.