2014-01-20 3 views
5

컨트롤러의 속성에 바인딩을 시도하고 있지만 속성 이름 자체가 컨트롤러의 다른 속성으로 저장되어 있습니다. 디자인 타임에 속성 이름을 모른 채 속성에 바인딩해야합니다. 이것이 가능한가? 또는 일을하는 더 좋은 방법은 무엇입니까?핸들 바를 임의의 속성에 바인딩하는 방법은 무엇입니까?

ArrayController의 내용을 테이블로 표시하는보기를 만들고 있습니다. ArrayController에는 표시 할 속성 이름 목록이 있습니다 (columnsMeta). 템플릿에서 컨트롤러의 모든 항목을 조사한 다음 모든 열을 반복하고 이 열 값을 바인딩하도록하려고합니다.

{{#each row in controller}} 
    <tr> 
    {{#each col in columnsMeta}} 
     <td>{{getProperty col.property row}}</td> 
    {{/each}} 
    </tr> 
{{/each}} 

이 출력 :

Ember.Handlebars.registerBoundHelper('getProperty', function(property, obj) { 
    return obj.get(property); 
}); 

다음 템플릿에서 도우미로 속성 이름과 개체를 전달할 :

한 시도는 속성 값을 얻기 위해 핸들 도우미를 만드는 것입니다 표의 각 텍스트와 각 텍스트 부분은 metamorph 태그로 둘러싸여 있지만 모델 속성의 값을 변경하면 템플릿이 업데이트되지 않고 실제로 바인딩되지 않은 것처럼 보입니다.

이 표기법은 작동하지 않습니다

{{row.[col.property]}} 
{{row.[(col.property)]}} 

은 "col.property"의 이름으로 재산 존재하지 않고 아무것도 인쇄되지 않습니다.



는 I는 엠 테이블 프로젝트 contentDidChange를 사용하여 템플릿을 셀 내용을 공급하는 뷰에서 계산 된 속성을 생성하는 참조. Table Cell View in ember-table

하지만 정말 필요한가요? 덜 무거운 방법이 있습니까? 문법을 잘못 적용 했습니까?

감사합니다.

+0

당신이 도우미를 디버깅 적이 있습니까? – Kingpin2k

+0

헬퍼를 디버깅 할 때 무엇을 찾습니까? "id"또는 "title"과 같은 문자열로 속성의 적절한 이름이 전달되고 obj가 모델로 설정됩니다. 예상대로 작동하는 것 같아요, metamorph 태그가 ... 모델이 변경되면 그냥 업데이 트되지 않습니다. – Noland

+0

죄송합니다. 업데이트하지 않은 부분을 완전히 놓쳐 버렸습니다. 너무 일찍 읽어보십시오. 묶인 도우미는 속성으로 전송 된 속성을 보게됩니다. 바인딩 된 도우미는 보내진 속성 중 하나에서 동적 속성을 가져옵니다. 바인딩 된 도우미는 객체 참조 자체와 속성 이름을보고 있습니다. 변경되지 않기 때문에 업데이트를 알지 못합니다. – Kingpin2k

답변

2

하나 개의 솔루션은 registerBoundHelper에서와 ObjectController

컨트롤러 코드

App.ColController = Ember.ObjectController.extend({ 
    needs: ["row"], 
    getProperty: function() { 
     return this.get('controllers.row.' + this.get('property')); 
    }.property('controllers.row.foo', 'controllers.row.bar'), //this solution may not work if one does not have a finite known set of properties to observe  
}); 

보기 코드에 논리를 이동할 수 있습니다 :

<script type="text/x-handlebars" data-template-name="row"> 
    {{#each row in controller}} 
    <tr> 
     {{#each col in columnsMeta}} 
     {{render 'col' col}} 
     {{/each}} 
     </tr> 
    {{/each}} 
</script> 

<script type="text/x-handlebars" data-template-name="col"> 
    <td>{{getProperty}}</td> 
</script> 
+0

예, 그게 "유한 알려진 세트"문제입니다. 임의의 이름 및 속성 수가 실제로 작동하지 않습니다. – Noland

관련 문제