Оригинальный ответ (см. Ниже способ Ember)
Сначала я хочу попытаться объяснить, что здесь происходит: Ember (в настоящее время 1.9.1) уже довольно давно не возвращает обработанные шаблоны в виде строк при прямом вызове options.fn
(несмотря на все примеры кода, которые полагаются на это). поведение). Вместо этого ваш контент визуализирует «сам себя», что означает, что он использует функцию options.data.view
appendChild
, чтобы поместить вещи туда, где они должны быть. Вы можете увидеть это в действии, например. следуя коду помощника with
до строки 81 в ember-handlebars/lib/helpers/binding.js. Вы также можете найти предыдущее обсуждение этого в этом нить.
Итак, что вы можете с этим поделать? Нам нужно создать собственное представление, чтобы позаботиться о том, что нам нужно. Следующий код работает для меня, используя ember-cli. В app/helpers/ui-input
:
import Ember from 'ember';
var UiInputView = Ember.View.extend({
classNames: ['ui', 'input']
});
export default function(options) {
var view = options.data.view;
var viewOptions = {
shouldDisplayFunc: function() {return true;},
template: options.fn,
inverseTemplate: options.inverse,
isEscaped: !options.hash.unescaped,
templateData: options.data,
templateHash: options.hash,
helperName: 'block-helper'
};
var childView = view.createChildView(UiInputView, viewOptions);
view.appendChild(childView);
}
Возможно, не все параметры просмотра необходимы...
Надеюсь, это поможет.
Обновление: способ Ember
Когда я пришел сюда, чтобы ответить на этот вопрос, я был упрямо настроен на то, чтобы уметь писать собственные хелперы. Я мало знал о {{yield}}
помощник. Таким образом, правильный код будет выглядеть так:
Составная часть:
// app/components/ui-input.js
import Ember from 'ember';
export default Ember.Component.extend({
classNames: ['ui', 'input']
});
Шаблон:
{{!-- app/templates/components/ui-input.hbs --}}
{{yield}}
Использование:
{{#ui-input}}
Test
{{/ui-input}}
person
suluke
schedule
16.01.2015