컨트롤러를 사용하여 데이터를 장식하거나 모델에 속하지 않는 데이터를 추가합니다 (서버). 그러나 모델 데이터에 표시 데이터를 추가하여 ember.js의 템플릿에 전달할 수있는 방법을 이해하려고합니다.컨트롤러 ember.js의 모델에 디스플레이 데이터 추가
다음은 코드 예제입니다. 이 작업을 수행하는 더 좋은 방법이있을 수 있지만 어쩌면 나는 그것을 어렵게 만들고 있습니다.
사용자가 div를 클릭하면 div에 불이 들어 오도록 새 CSS 'select'클래스가 추가되기를 원합니다. DIV에
- 사용자가 클릭
조치
- userSelect 작업이 트리거와 컨트롤러에 isSelected는 사실로 설정됩니다. 이렇게하면 템플릿이 업데이트되고 의 'selected'태그가 클래스 속성에 추가되어 div가 으로 업데이트됩니다.
문제 :
- 내가 디스플레이를 추가 할 모델의 각 사용자에 isSelected 속성뿐 아니라 모델에 내가 지금하고있는 것 같은. 그게 가능하니?
- 현재 구현 된 방법으로 'selected'태그는 isSelected = false 일 때만 표시됩니다. 논리가 바뀌거나 isSelected가 새 값에 바인드되는 순서는 템플리트 렌더링 후에 발생합니다.
의 user.js
App.User = DS.Model.extend({
firstName: DS.attr('string'),
lastName: DS.attr('string')
});
App.User.FIXTURES =
[
{
id: 1,
firstName: 'Derek',
lastName: "H",
},
{
id: 2,
firstName: 'Test',
lastName: "H",
}
]
UserListController.js
App.UserListController = Ember.ArrayController.extend({
isSelected: false,
userSelect: function(userId){
this.set('isSelected', true);
console.debug(userId + " isSelected:" + this.get('isSelected'));
}
});
index.html을
<script type="text/x-handlebars" id="userList" data-template-name="userList">
{{#each controller}}
<div {{bindAttr class="isSelected:selected:notselected"}} {{action userSelect id}}>
</div>
{{/each}}
</script>
난 그냥 DOM을 조작하고 클래스를 추가 할 수 있음을 인식, 하지만 나는 당신이 엠버를 위해 그것을 할 올바른 접근법을 알고 싶었습니다. 특별히.
감사 어떤 조언, 감사 D
이것은 isSelected가 실제로 서버 데이터가 아니기 때문에 내가 가고 싶었던 경로가 아니라 더 많은 디스플레이 데이터입니다. 고마워요! – darewreck
서버 데이터가 아닙니다. 서버 데이터로 속성을 지정하려면 DS.attr ('string') 또는 Ember.attr ('string')을 설정합니다. 서버와 디스플레이 데이터를 구별 할 수 있도록 설계되었습니다. –
이 방법을 사용할 수는 있지만 권장하지는 않습니다. isSelected 속성은 실제로 모델이 아닌 컨트롤러에 속합니다. 왜 미묘하지만 중요한지 이해하기 - 각 사용자에 대해 단일 모델 객체가 있지만 많은 컨트롤러가있을 수 있습니다. 해당 사용자 개체는 몇 개의 목록, 검색 결과, 편집 페이지 등에 나타날 수 있습니다. 모델에 isSelected와 같은 응용 프로그램 상태 속성을 입력하면 피가 흐려져 디버그 문제가 발생합니다. –