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); 
}); 

И я предполагаю, что это потому, что п() записывает непосредственно в выходной буфер.

Однако мне нужен способ напрямую работать с выходом содержимого блока.

Я попытался переписать функцию render вида, но это также не привело меня никуда.

(Фон: Я пытаюсь написать вспомогательный блок {{#ifchanged}}, который отображает только, если содержимое изменилось по сравнению с последним вызовом. Пример использования - это цикл, который должен отображать что-либо каждый раз, когда одно свойство модели отличается от последнего. Если у вас есть другие идеи, как это сделать, комментарии очень ценятся!)

+0

Вы используете данные ember-данных? –

+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

Спасибо, но я не хочу знать *, если модель изменилась *, но только если одно свойство отличается от последнего внутри цикла {{each}}. – graup

+0

у вас есть массив элементов, то на итерации, если какое-то свойство текущего элемента отличается от предыдущего, вы хотите узнать? –

+0

Именно это. У меня есть массив элементов, обладающих свойством «group», и для каждой группы я хочу отобразить строку текста, но только один раз. – graup

Смежные вопросы