2013-08-06 3 views
1

은 분명히이 작동하지 않습니다 http://jsbin.com/efapob/3/editEmber.js 핸들 바 블록 도우미

Ember.Handlebars.registerHelper('foo', function(options) { 
    var result = 'BEFORE ' 
      + options.fn(this) 
      + ' AFTER'; 
    return new Handlebars.SafeString(result); 
}); 

그리고는 fn()가 출력 버퍼에 직접 기록하기 때문에 그것의 가정합니다.

그러나 블록의 내용물을 직접 출력하는 방법이 필요합니다.

보기의 render 기능을 덮어 쓰려고했으나 아무 것도 이끌지 않았습니다.

(배경 : 마지막 호출과 비교하여 내용이 변경된 경우에만 렌더링하는 {{#ifchanged}} 도우미 블록을 작성하려고합니다. 사용 사례는 모델의 속성 하나가 표시 될 때마다 표시되어야하는 루프입니다. 마지막 아이디어와 다른 점이 있습니다.이 아이디어를 얻는 방법에 대한 다른 아이디어가 있다면, 매우 감사합니다.)

+0

ember-data를 사용하고 있습니까? –

+0

예. 재미있게, 어떻게 연결될 수 있습니까? – graup

+0

isDirty 속성을 사용하면 속성 변경시기를 알 수 있습니다. 내 대답을 한번보세요. –

답변

1

사람이 어떻게 그렇게 같은 fn()의 반환 사용할 수 없다는 문제를 해결했다이 특정 사용 케이스에 관심이있는 경우 :

var ifchanged_last; 
Ember.Handlebars.registerHelper('ifchanged', function(property, options) { 
    var value = Ember.Handlebars.get(this, property); 
    if (value !== ifchanged_last) { 
    options.fn(this, options); 
    } 
    ifchanged_last = value; 
    return; 
}); 

템플릿 :

{{#each content}} 
    {{#ifchanged some_key}} 
    The value changed 
    {{/ifchanged}} 
{{/each}} 

대형을 개선의 여지가 있지만 사용 가능한 출발점.

0

isDirty 속성은 DS.Model에서 언제 데이터가 변경되는지 알 수 있습니다. 일부 템플릿에서

:

{{#if isDirty}} 
    You changed the model<br/> 
{{/if}} 

그리고 데모와 jsfiddle.

+0

고맙지 만, 모델이 변경된 경우 *를 알기를 원하지 않지만 하나의 속성이 {{각}} 루프의 마지막 속성과 다릅니다. – graup

+0

당신은 현재 요소의 일부 속성이 이전과 다른 경우 반복의 요소 배열을 가지고 알고 싶습니까? –

+0

바로 그것입니다. 나는 '그룹'속성을 가진 항목들의 배열을 가지고 있으며, 모든 그룹에 대해 한 줄의 텍스트를 보여주고 싶지만 한 번만 표시하려고합니다. – graup