访问嵌套组件中的父属性

时间:2015-11-06 23:27:56

标签: javascript ember.js handlebars.js

由于预计Routable Components即将推出,我尝试在我的Ember 2.0应用程序中尽可能使用组件。我遇到了一个令人困惑的问题,当我以块形式提供时,我无法从模板访问父组件的属性。这可能是非常好的,但这是不可能的,但我想确定。这是一个例子:

模板:

// templates/approvals.hbs
{{#x-secure/schedule/approvals}}

  {{#x-secure/layout/full sectionTitle=sectionTitle sectionDescription=sectionDescription}}
    ...
  {{/x-secure/layout/full}}

{{/x-secure/schedule/approvals}}

组件模板:

// templates/components/schedule/approvals.hbs
{{yield}}

组件:

// components/schedule/approvals.js
import Ember from 'ember';

export default Ember.Component.extend({

  /////////////////////////////////////
  // PROPERTIES
  /////////////////////////////////////

  sectionTitle: 'Scheduling: Approvals',
  sectionDescription: 'Lots of magical , fanstastic stuff.'

});

我遇到的问题是我无法从父组件(sectionTitle)访问sectionDescriptionapprovals并将其传递给{{ 1}}组件。但是,如果我从组件块中删除代码并将其移动到layout/full模板,它将按预期工作。是否无法从组件的块形式访问父组件的属性?

谢谢!

1 个答案:

答案 0 :(得分:1)

确实不可能。组件的属性在组件的模板中可用,但在实例化组件的模板中不可用。

如果您需要该组件使其可用,它应该明确地产生它们:

// templates/components/schedule/approvals.hbs
{{yield sectionTitle sectionDescription}}

使用组件:

// templates/approvals.hbs
{{#x-secure/schedule/approvals as |title description|}}

  {{#x-secure/layout/full sectionTitle=title sectionDescription=description}}
    ...
  {{/x-secure/layout/full}}

{{/x-secure/schedule/approvals}}

注意as |x y ...|表示法为名称赋值。

任何事情都可能以这种方式产生,包括this(但要小心,这会破坏封装)和行动。