据我所知,操作意味着在模板中用于处理用户事件。但是,在一些Ember项目中,我有时会在控制器和其他不喜欢它的地方看到send
函数的大量使用。
起初,这似乎不是惯用的行为。那为什么要有send
功能呢?如果操作仅用于用户事件,则只能从模板访问它们。其他一切都会进行显式的函数调用。
简而言之,是否有一些使用控制器操作的约定?经验法则?
答案 0 :(得分:2)
从任何地方调用操作都是可接受的模式。虽然如果从控制器的范围内调用操作,将该代码从操作移动到单独的函数并让操作调用该代码可能会很有用。尽管如此,召唤行动仍然完美无缺。你应该记住,他们大多是一条单行道。它们适用于事件驱动的问题,通常是UI交互,但可以是其他事情。
...
someFunc: function(){
this.doSomethingImpl(a,b);
},
doSomethingImpl: function(a,b){
...
},
actions: {
doSomething: function(a,b){
this.doSomethingImpl(a,b);
}
}
答案 1 :(得分:1)
使用send
并在控制器内发送动作没有错。但是,最好使用显式函数 - 品味。
另一方面,如果你在一对控制器和/或路由中看到很多send
,那么检查那些控制器的父路由可能是个好兆头。由于存在上升约定Data Down, Actions Up
,组件和控制器之间的流程应通过单向绑定向下发送数据来确定,但只能通过接收要执行的操作在数据所有者级别上修改它们变化
很多send
出现可能意味着在该项目中引入了约定,并且具有父路由和控制器的控制器通过发送操作进行通信。
关于The Road to Ember 2.0,有一个非常有趣但很长的RFC,您可以从中了解有关将要出现的概念和约定的更多内容。
答案 2 :(得分:0)
是的,会有以下数据形式的约定:数据停止,行动起来'基本上,在Ember 2.0中,视图和控制器正在消失,将被组件和简化的单向数据流所取代。
你可以谷歌更多地了解这一点,但是在这段时间里,当我试图了解所有这些时,我发现这些资源是有价值的:
http://burstcreations.com/blog/data-down-actions-up/
http://coryforsyth.com/2014/09/24/communicating-with-ember-js-components-using-sendaction/