В чем разница между sendAction и отправкой?

Я определил два пользовательских объекта, в которых первый расширяет Ember.TextField, а второй - Ember.Select. Когда соответствующее действие запускается в Ember.TextField, я выполняю некоторую обработку, и если требование выполняется, я распространяю действие на базовый контроллер, используя @sendAction("actionName").

Однако, когда я пытаюсь сделать то же самое с помощью Ember.Select, я получаю следующую ошибку:

Uncaught TypeError: Object [object Object] has no method 'sendAction' 

и нужно использовать @get("controller").send("actionName"). Мой наставник считает, что эта несогласованность приводит к коду спагетти, и я согласен с ним. Почему я не могу позвонить @sendAction из Ember.Select, который является предпочтительным способом, который я понял, в Ember?

В чем основное отличие между ними?

Ответ 1

sendAction следует использовать, когда внутри компонента. Это позволяет вам нарушать границы компонента, если это действие определено при подключении компонента. Это помогает поддерживать защиту, гарантированную компонентами, но все же позволяет компоненту отправлять сообщения, если вы хотите его прослушать. https://guides.emberjs.com/v2.4.0/components/triggering-changes-with-actions/

{{my-component someInternalAction=someExternalAction}}

send следует использовать везде.

Ember.Select и Ember.TextField - оба компонента, поэтому вам нужно использовать sendAction