Подтвердить что ты не робот

Может ли Ember.Component иметь как блочную, так и неблокирующую форму?

Я хотел бы создать Ember.Component, который можно использовать либо в блочной форме, либо без блока, если требуется определенное поведение по умолчанию.

Например, в блочной форме:

{{#my-helper}}
  ...
{{/my-helper}}

Или неблокированная форма:

{{my-helper}}

Где вспомогательный шаблон каким-то образом может обнаружить, что нет блока и ведет себя соответственно. Например, было бы неплохо, если бы какой-то способ обнаружить блок:

{{#if hasBlock}}
  {{yield}}
{{else}}
  default output
{{/if}}

Для моих требований мне нужно каким-то образом вывести что-то, только если нет блока.

Любые идеи, как это сделать?

обновление:

Если вы смущены тем, почему мой вопрос такой же, как и принятый ответ, потому что Эмберу удалось принять новый синтаксис, который я точно представлял себе как желательный. Когда я впервые задал этот вопрос, оказалось, что существует недокументированный способ сделать это с помощью {{#if template}}, но с тех пор он был устаревшим с Ember 2.x и там появился новый синтаксис {{#if hasBlock}}, который соответствует тому, как я сформулировал свой вопрос.

4b9b3361

Ответ 1

Внутри Component вы хотите проверить значение hasBlock

{{#if hasBlock}}
  {{yield}}
{{else}}
  <p>Default content for inline (non-block) form of the component.</p>
{{/if}}

Здесь JSBin: http://jsbin.com/IWEKere/1/edit

Ответ 2

Ссылка на документы находится здесь: http://emberjs.com/api/classes/Ember.Component.html#property_template

В документах явно не указано, что атрибут шаблона используется таким образом. Поскольку класс Ember.Component наследуется от класса Ember.View, можно сделать вывод, что шаблон компонента действует как шаблон шаблона Ember.View.

Ответ 3

"шаблон" устарел в пользу частичного, например.

{{#if partial}}
  {{yield}}
{{else}}
  <p>Default content for inline (non-block) form of the component.</p>
{{/if}}

Ответ 4

Доступ к template напрямую в настоящее время устарел, но есть свойство hasBlock, помеченное функцией (которое в основном делает !!template под капотом), которое должно использоваться в этом случае.

Флаг функции ember-views-component-block-info

Здесь ссылка на запрос объединенного pull: https://github.com/emberjs/ember.js/pull/10461