我最近正在研究 emberjs。我有一个关于 View 如何相互通信的问题。我知道 View 不通信,所以问题可能是路由或 Controller ( View 模型)。
来自其他框架和语言,我使用了一种称为 pubsub 的模式来传播特定信息已更改的信息,其他 View (对此信息感兴趣的 View )将订阅并可以在发送事件/消息时更新.
这也是一种适用于 emberjs 哲学的模式吗?或者您将如何根据其他部分的更改更新 UI 上的不同部分?
一个(非常)简单的例子可以是:
-> Application
-> Navigation which contains a Link to the posts route with a number of current posts (count)
-> Posts route would have a list of post with details (and add,delete,etc) actions
现在,当我创建一个帖子时,它会被添加到列表中,我应该如何更新导航中的帖子计数?
显然,这也可以/应该适用于更复杂的示例。 作为说明: 目前我还有一个用于统计数据的服务器路由。所以导航和它的帖子数将从服务器获取并且它不受帖子数组的长度限制......
使用 emberjs 处理此类问题的最佳方法是什么?
最佳答案
如 http://emberjs.com/guides/views/ 中所述, View 基本上用于处理用户事件和创建可重用的组件。然而,一些有用的事实是,
1。View
模板将呈现的内容基于相应Controller
持有的模型和属性。
2。View
可以访问它对应的 Controller
以及任何其他关联的 Controller (通过 needs
属性 http://emberjs.com/guides/controllers/dependencies-between-controllers/ ) 和它们持有的数据。
3。如果 View 共享一个模型,那么它们将在模型更改时更新。发生这种情况有几种情况,最常见的一种是通过 {{view}}
助手插入 View 。( http://emberjs.com/guides/views/inserting-views-in-templates/ )
4。如果 View 或其相应的 Controller 正在观察或绑定(bind)到公共(public)属性,那么它们也将被更新(http://emberjs.com/guides/object-model/classes-and-instances/)。
考虑到这些事实,可以根据特定系统的要求解决这个特定问题。例如,一些选项可以是(附有粗略示例),
- 如果在执行 crud 操作时所有数据/帖子都可用,则绑定(bind)到
Posts
Controller 的帖子枚举 (http://emberjs.com/guides/object-model/computed-properties-and-aggregate-data/) 可以更新关联的Navigation 的计算属性
显示帖子总数的 Controller 。
http://emberjs.jsbin.com/huqoq/1/edit
- 如果数据是延迟加载的,例如在页面中,然后让
Navigation
Controllerobserve
Posts
Controller 枚举帖子的变化,可以触发对服务器的请求以检索根据操作(创建/删除)更新帖子总数或更新计数器值。
http://emberjs.jsbin.com/jomes/1/edit
Navigation
View 可以简单地插入到Posts
View 中并共享相同的模型,并具有显示总帖子数的计算属性。
http://emberjs.jsbin.com/xujap/1/edit
Navigation
View 可以通过带有帖子模型的{{render}}
助手呈现。( http://emberjs.com/guides/templates/rendering-with-helpers/ )
关于javascript - 应用程序的 View 或部分如何在 ember js 中相互通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21706534/