Мое предложение для этого ничем не отличается от решения, которое вы уже описали в объяснении вопроса; но мое предложение предоставит вам более многократно используемый и более each-in
вспомогательный подход:
Как насчет создания контекстного компонента без тега с позиционным параметром с именем each-in-component
и перемещения всего определения вычисляемого свойства в этот компонент. Я использую вид синтаксиса Ember 2.x, но думаю, что Ember 1.x не будет сильно отличаться; так что этот компонент будет что-то. как:
import Ember from 'ember';
export default Ember.Component.extend({
objectProperties: Ember.computed('object', function() {
let object = this.get('object');
return Object.keys(object).map(key => {
return {
'key': key,
'value': Ember.get(object, key)
};
});
}),
tagName: ''
}).reopenClass({
positionalParams: ['object']
});
и соответствующий шаблон компонента будет давать вычисляемый массив свойств:
{{#each objectProperties as |objectProperty|}}
{{yield objectProperty.key objectProperty.value}}
{{/each}}
Так что теперь вы можете использовать этот компонент как обычный each-in
; которого нет в Ember 1.x.
{{#each-in-component attributes as |key value|}}
{{key}} : {{value}}<br>
{{/each-in-component}}
При таком подходе; вы можете повторно использовать один и тот же компонент несколько раз, и код, который вы не хотите иметь в своем собственном компоненте, будет лежать в пределах each-in-component
. Я обернул свое решение, чтобы проиллюстрировать его в действии следующим образом: twiddle . Я надеюсь, что это работает.