우선 view
을 component
으로 변경합니다. 뷰에는 유효한 유스 케이스가 있지만 일반적으로 구성 요소를 사용하는 것이 좋습니다.
또한 생각해 보면 구성 요소 외부의 누군가가 마지막으로 클릭 한 구성 요소를 알아야한다는 것을 알 수 있습니다. 그 밖에 배우 (처음 null
로 밖으로 시작) 속성이 lastComponentClicked
을 불렀다 수있는 컨트롤러,
다음
App.IndexController = Ember.ArrayController.extend({
lastClickedComponent: null
});
, 당신은 각 구성 요소에 해당 속성을 전달할 수 있으며, 속성은 모든 컨트롤러 사이에 결합된다 할 수있다 다음과 같은 구성 요소 :
<script type="text/x-handlebars" data-template-name="index">
{{#each content in model}}
{{ x-box content=content lastClickedComponent=lastClickedComponent}}
{{/each}}
</script>
지금까지는 그렇게 좋았습니다. 이제, 구성 요소 자체에 대한 :
App.XBoxComponent = Em.Component.extend({
classNames: ['box'],
isSelected: function(){
return this.get('lastClickedComponent') === this._uuid;
}.property('lastClickedComponent'),
click: function(){
this.set('lastClickedComponent', this._uuid);
}
});
가 클릭 할 때마다, 당신은 얻을 때마다 재설정하여 모든 구성 요소와 컨트롤러 사이에 바인딩 된 lastClickedComponent
속성을 설정할 수 있습니다. 예를 들어 this._uuid
과 같이 구성 요소에 고유 한 값으로 설정할 수 있습니다.
isSelected
계산 된 속성은 lastClickedComponent
속성이이 구성 요소의 속성인지 여부를 확인할 수 있습니다.이 경우 표시 할 내용이 확장됩니다. D 을하지만 내 _uuid는 정의 보여주는, 그래서 그것을 대신 elementId로부터있어지고있어 :
<script type="text/x-handlebars" id="components/x-box">
{{content}}
{{# if isSelected }}
<div>LAST SELECTED</div>
{{/if}}
</script>
전문 솔루션 here
감사 @Kalman는 마법처럼 일했다. –
Elementid는 매우 독특합니다. 그래서 잘해야합니다. – Kalman