2015-11-06 72 views
0

预期Routable组件即将推出,我试图在我的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.' 

}); 

我遇到的问题是,我无法访问来自父组件(approvals)的sectionTitlesectionDescription,并将其传递给我layout/full组件。但是,如果我从该组件的代码块中删除代码并将其移至templates/components/schedule/approvals.hbs模板,则它将按预期工作。是否无法从组件的块形式访问父组件的属性?

谢谢!

回答

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(尽管如此,小心封装)和行为。

+0

工作很好!不幸的是,我没有在文档中遇到过这种情况 - 它肯定会带来很多可能性。谢谢! – jdixon04

+0

这将是因为它还没有在文档中。它在v1.10中添加并在相关的[发行说明](http://emberjs.com/blog/2015/02/07/ember-1-10-0-released.html#toc_block-params)中公布,但导游正在等待更新。我在git中看到了一个更新的版本,所以它应该会很快出现。 – spectras