Объект объекта привязки к компоненту в ember

Я пытаюсь создать модальный компонент окна в ember. Модальная коробка имеет две стандартные кнопки: "закрыть" и "сохранить". Я хотел передать действие контроллера этому компоненту, чтобы при нажатии кнопки сохранения он вызывал действие контроллера, которое было передано. Я называю свой компонент следующим:

 {{#affi-modal-box title="Test title" modalId="createNewAnalyticsRunModal" controllerBinding=controller}}some message{{/affi-modal-box}}

и мой компонент:

AS.AffiModalBoxComponent = Ember.Component.extend({
attributeBindings: ['modelId','test'],
    //this is the function that gets called when save button is clicked 
    onSaveButtonClick : function(){

        console.log(this.controllerFor('analysisTemplates'));//fails
        console.log(this.get('controller'));//returns modal box component which I don't need 
    }

});

Любые идеи о том, как передать объект контроллера компоненту

Спасибо.

Ответ 1

Способ работы Ember.Component должен быть агностическим для других частей вашего приложения, поэтому вместо этого передайте контроллер, на который вы хотите вызвать действие, когда что-то происходит в вашем компоненте, вы делаете это больше как в следующим образом:

{{#affi-modal-box 
  title="Test title" 
  modalId="createNewAnalyticsRunModal" 
  action="actionNameOnTheController"}}some message{{/affi-modal-box}}

Как вы видите, вы устанавливаете атрибут action для имени действия на вашем контроллере, а затем внутри своего компонента вы просто вызываете this.sendAction('action');, который будет вызывать любое имя действия, которое вы определили ранее:

AS.AffiModalBoxComponent = Ember.Component.extend({
  attributeBindings: ['modelId','test'],
  //this is the function that gets called when save button is clicked 
  onSaveButtonClick : function(){
    this.sendAction('action');
  }
});

Итак, всякий раз, когда вызывается onSaveButtonClick, он отправляет действие actionNameOnTheController тому, кто его прослушивает. И лучше всего, ничего не зная о контроллере. Это та функциональность, которая делает Ember.Component многократно используемым.

См. здесь простую демонстрацию объясняемой концепции.

Надеюсь, что это поможет.