2014-12-31 12 views
2

나는 다음과 같은 구성 요소에서 컨트롤러의 속성을 변경하기 위해 노력하고있어 (JSBIN 예 http://jsbin.com/gevuhu) "필요"엠버 구성 요소는

App.CategoryManagerController = Ember.Controller.extend({ 
    selectedCategory: null, 
}); 

App.BlogPostComponent = Ember.Component.extend({ 
    needs: ['categoryManager'], 
    selectedCategory: Ember.computed.alias('controllers.categoryManager.selectedCategory'), 
    actions:{ 
     selectedCategory: function(){ 
      this.set('selectedCategory',1); 
     } 
    } 
}); 

을 있지만 오류 Property set failed: object in path "controllers.categoryManager" could not be found or was destroyed.

을 받고 구성 요소에서 "필요"를 사용할 수 없습니까?

+0

구성 요소에는 'needs'속성이없고 컨트롤러 만 필요합니다. 구성 요소의 핸들 바 도우미에서 구성 요소의 원하는 데이터를 전달해야합니다. – Grapho

+0

다른 컨트롤러의 구성 요소에서 속성을 업데이트하려면 어떻게해야합니까? – Noor

답변

3

Ember 구성 요소는 컨트롤러 (참조 : here 참조)를 비롯한 주변 컨텍스트와 완전히 분리되어 있습니다. 그것은 나쁜 소식입니다. 좋은 소식은 selectedCategory을 구성 요소에 전달하면 양방향 바인딩이되므로 구성 요소의 모든 변경 사항이 컨트롤러에 알려짐을 의미합니다.

App.ApplicationController = Ember.ObjectController.extend({ 
    needs: ['categoryManager'], 
    selectedCategory: Ember.computed.alias('controllers.categoryManager.selectedCategory'), 
    selectedCategoryChanged: function(){ 
     alert("NEW CATEGORY: " + this.get('selectedCategory')); 
    }.observes('selectedCategory') 
}); 

다음 application 템플릿에, 당신은 같은 버전에서 작동하는 예를 here

0

를 참조

{{ blog-post selectedCategory=selectedCategory }} 

을 말할 수있다 :

그래서, 컨트롤러는 같은 것이 될 수있다 2.2. 다음과 같이 작성합니다 :

App.ApplicationController = Ember.Controller.extend({ 
    categoryManager: Ember.inject.controller("categoryManager") 
}); 

이제 categoryManager에는 categoryManager라는 컨트롤러가 있습니다.