2013-02-28 2 views
0

보기에서 클릭 핸들러에 문제가 있습니다. 예상되는 컬렉션 멤버를 반환하지는 않지만 컬렉션 전체를 반환합니다.클릭 동작이 올바른 객체를 반환하지 않음

문제를 설명하기 위해 jsfiddle을 만들었습니다. 나는 내용이 미리 채워져있는 ArrayController를 가지고 있습니다. 이 컨트롤러의 뷰는 다른 뷰 컨트롤러의 #each 도우미를 사용

{{#each controller}} 
    {{view App.ActivityListItemView}} 
{{/each}} 

이 작동이 점에서 나는 페이지에있는 항목의 이름을보고, 그것을 클릭 할 수 있습니다.

문제는 클릭 처리기에 있습니다. @get ('content') 인 경우 상위 컨트롤러의 콘텐츠가 반환됩니다. 클릭 한 항목을 가져 오는 방법은 무엇입니까? jsfiddle에서 콘솔 출력을 보면 문제가 표시됩니다. 문맥 문제라고 생각 하나?

내가 contentBinding는 = "이"보기에 추가 시도했다 :

{{#each controller}} 
    {{view App.ActivityListItemView contentBinding="this"}} 
{{/each}} 

하지만 그 차이가 없습니다.

덕분에,

마틴

답변

1

어떻게에 클릭 된 항목을받을 수 있나요? jsfiddle에서 콘솔 출력을 보면 문제가 표시됩니다. 문맥 문제라고 생각 하나?

정확히. 컨트롤러의 내용 대신보기의 context을 원합니다. 그래서 :

click: (data)-> 
    console.log 'clicked on an activity' 
    selected = @get('context') 
    @get('controller').set('selectedActivity', selected) 
    console.log(@get('controller').get('selectedActivity.name')) 

이유는 무엇입니까? 컨트롤러가 발견 될 때까지 기본적 {{#each}} helper does not create a new controller instance for items in the array. So when you @get ('제어')로

가 '뷰 헬퍼에서 뷰 계층 구조를 검색 - 상기 어레이 컨트롤러이 경우.

당신이 각 도우미에 itemController 속성을 제공 할 수있는 각 항목에 대한 별도의 컨트롤러를 갖고 싶어 - 설명 마이클 http://emberjs.com/api/classes/Ember.Handlebars.helpers.html#method_each

+0

감사를 참조 - 나는'itemController' 속성을 체크 아웃 할 수 있습니다. –

0

오른쪽, 나는이 작업을있어, 나는 문제가 contentBinding 인수에 대한 이해의 부족 달려들 생각합니다. 기본적으로 #each 블록 내에서 'activityBinding'이라는 특정 이름을 사용한 다음 클릭 핸들러에서 명시 적으로 활동을 참조하도록 변경했습니다. 작업 데모는 jsfiddle을 참조하십시오.

{{#each controller}} 
    {{view App.ActivityListItemView activityBinding="this"}} 
{{/each}} 

click: -> 
    console.log 'clicked on an activity' 
    console.log @get('activity.name') 
    content = @get('activity') 
    @get('controller').set('selectedActivity', content) 
관련 문제