Можно ли узнать внутри компонента, что у него есть блочный контент

Другими словами: можно ли внутри компонента узнать, в каком виде он был вызван в шаблоне {{my-component}} или {{#my-component}} ... {{/my-component}}?

Да, это можно узнать. Но есть ограничение. Узнать об этом можно только в шаблоне компонента:

// app/templates/components/my-component.hbs
{{#if hasBlock}}
	{HAS BLOCK}
{{else}}
	{NO BLOCK}
{{/if}}

Откуда вообще берется этот hasBlock? Его значение вычисляется в функции getRoot (get-root). Внутри «js»-компонента «официально» получить нельзя. «Не официально» же это делается опять-таки через шаблон:

// app/templates/components/my-component.hbs
{{#if hasBlock}}{{setHasBlock}}{{/if}}
// app/components/my-component.js
export default Ember.Component.extend({
  setHasBlock: Ember.computed(function () {
    this.set('hasBlock', true);
  })
});

Этот способ описан в RFC js-has-block (pull-request) об добавлении возможности получить доступ к hasBlock из js, а не только из hbs. Способ являет собой доступную на данный момент альтернативу запрашиваемого функционала. В данный момент сам RFC находится на этапе обсуждения. А парочка тикетов в EmberJS (#11741 и #12703) закрыты в пользу этого RFC.

, , ,

Оставить комментарий

Top ↑ | Main page | Back