我定义了两个自定义对象,第一个是扩展Ember.TextField,第二个是Ember.Select。当在Ember.TextField中触发相应的操作时,我会进行一些处理,如果满足要求,则使用@sendAction("actionName")
将操作传播到基础控制器。
但是,当我尝试使用Ember.Select时,我得到以下错误:
Uncaught TypeError: Object [object Object] has no method 'sendAction'
并且必须使用@get("controller").send("actionName")
。我的导师认为这种不一致会导致意大利面条代码,我同意他的意见。为什么我不能从Ember.Select中调用@sendAction
,这是我在Ember中理解的首选方式?
两者之间的主要区别是什么?
答案 0 :(得分:18)
sendAction
。如果在连接组件时定义了该操作,它允许您突破组件的范围。这有助于保持组件保证隔离,但如果您想要监听它,仍然允许组件发送消息。 https://guides.emberjs.com/v2.4.0/components/triggering-changes-with-actions/
{{my-component someInternalAction=someExternalAction}}
send
应该在其他地方使用。
Ember.Select
和Ember.TextField
都是组件,因此您需要使用sendAction