Ответ 1
Компонент имеет изолированный контекст. Поэтому он ничего не знает о чем-либо (маршруте или контроллере) вне компонента. Чтобы отправить действие с вашего компонента на ваш маршрут, вы должны передать действие маршрута компоненту в своем шаблоне следующим образом:
// your template
{{your-component closeModal="closeModal"}}
Теперь, когда вы вызываете this.sendAction('closeModal')
в своем компоненте, он вызывает действие, данное компоненту в вашем шаблоне, что в данном случае является действием closeModal
вашего маршрута.
Дополнительные сведения см. в документах (http://emberjs.com/api/classes/Ember.Component.html#method_sendAction)
ОБНОВЛЕНИЕ 3 августа 2016 г.
Для тех, кто столкнулся с действиями закрытия в новых версиях Ember, вы также можете использовать такие действия здесь:
// your template
{{your-component closeModal=(action "closeModal")}}
Этот помощник действий укажет на действие вашего контроллера, в компоненте вы можете вызвать this.attrs.closeModal()
или this.get('closeModal')()
, чтобы вызвать действие вместо вызова sendAction
.
Преимущество этих действий состоит в том, что действие может вернуть значение, которое может быть использовано в компоненте. В случае модальности это может быть использовано, например, для определения того, может ли модаль быть закрыт или нет, если вызывается closeAction
, если он возвращает false
, например, вы можете принять решение о том, чтобы предотвратить закрытие модала.
В качестве побочного примечания действия закрытия всегда указывают на ваш контроллер, чтобы он указывал на действие маршрута, вы можете взглянуть на этот аддон: https://github.com/DockYard/ember-route-action-helper