2013-02-07 5 views
5

ApplicationController에서 IndexController에 바인딩하려고합니다. Here is my jsfiddle. 요약하면, 여기에 내가 변경되는 가 인 IndexController에서 값을 isClicked 응용 프로그램 컨트롤러Ember.js : 컨트롤러 간의 데이터 바인딩

indexIsClickedBinding: "App.indexController.isClicked", 

isIndexClicked: function() { 
    alert("its changed to " + this.get("indexIsClicked")) ; 
}.observes('indexIsClicked'), 

그래서,에있는 바인딩되지만 indexIsClickedBinding 아무것도하지 않습니다. 내 코드에서 어떤 제안이 잘못 되었습니까?

건배

답변

23

해결책은 간단하지만 시도해 보도록하겠습니다. 확실하지 않으면 언제든지 질문하십시오.

의 자산은 App.indexController입니다. 그러나 Ember.JS가 더 이상 컨트롤러의 인스턴스를 직접 App에 배치하지 않기 때문에이 인스턴스는 존재하지 않습니다.

컨트롤러 사이에 tight coupling을 생성하므로 절대 이름을 사용하여 컨트롤러를 참조하는 것은 좋지 않기 때문에 이전 Ember 버전에서는 App에 있었지만 더 이상은 사용되지 않았습니다.

그래서 Ember.JS는 다른 방법으로 컨트롤러를 참조 할 수 있습니다. 현재 컨트롤러에 다른 컨트롤러가 필요하다는 공통 요구 사항입니다.

따라서 needs을 구현하면 컨트롤러에 다른 컨트롤러에 대한 액세스 및 보유한 속성 : http://jsfiddle.net/uB5tX/7/

needs을 사용하여 컨트롤러를 느슨하게 연결했습니다. 우리는 그 이름으로 Ember를 참조했습니다. JS는 우리를 위해 컨트롤러를 검색합니다. App을 변경하면 아무 것도 변경할 필요가 없으며 Ember.JS가 컨트롤러의 동작을 변경하는 경우 needs을 다시 업데이트 할 필요가 없습니다. 동작이 변경되면 needs도 업데이트됩니다. 올바른 컨트롤러를 다시 가져옵니다.

+0

덕분에 많이! 그래서 당신이 앱을 할 수 없다면.someController, 이제는 #each가있는 템플릿에서 어떻게 작동합니까? ** {{# each App.someController}} **? –

+1

'needs' 접근법을 사용한다면'Controller' 부분을 지정할 필요가 없습니다. 'IndexController'가'AnotherController'를 필요로한다면'IndexController'에'controllers.another'로 참조하면됩니다. 뷰에 대해서도 마찬가지입니다 :'#each controllers.another'. – Wildhoney

+0

확인. 마지막 상황 하나. ArrayController는 어떻게 처리할까요? [이] (http://jsfiddle.net/ud3323/4ysxQ/) 피들 그들은 여전히 ​​옛날 일을하고, 나는이 [http://jsfiddle.net/jeanluca/]에서 일할 수 없습니다. –

0

당신은 다른 컨트롤러의 속성에 액세스하는 구문을 다음 사용할 수 있습니다 : 당신은 엠버 먼저이 컨트롤러를 초기화해야하지만 실제로 index에 따라 약간의 계산 된 속성을 호출 할 필요가 그래서 것 (

import Ember from 'ember'; 

export default Ember.Controller.extend({ 
    index: Ember.inject.controller('index'), 
    indexIsClicked: Ember.computed.alias("index.isClicked"), 

    isIndexClicked: Ember.observer('index.isClicked', function() { 
    alert("its changed to " + this.get("indexIsClicked")); 
    }) 
}); 

을 느리게 초기화하십시오.) 그래서, 템플릿의 예를 들어 내가 사용

Is index clicked: <b>{{indexIsClicked}}</b> 

Working demo.

관련 문제