从呈现模板中的应用程序控制器访问属性

时间:2014-11-26 23:31:09

标签: layout ember.js properties controller ember-cli

我在应用程序控制器上设置了这些属性

monthToParse: null,
yearToParse: null,

fullDateToParse: function() {
    // set array to month names
    var monthNames = [ "January", "February", "March", "April", "May", "June",
  "July", "August", "September", "October", "November", "December" ];
    // set a variable to a new date object
    var date = new Date();
    // set the month to the previous month and return that
    date.setMonth(date.getMonth() - 1);
    // set the controller properties for use in other parts of the app
    this.set('monthToParse', monthNames[date.getMonth()]);
    this.set('yearToParse', date.getFullYear());

    return this.get('monthToParse') + ' ' + this.get('yearToParse');
}.property('monthToParse', 'yearToParse'),

他们在我的application.hbs中工作。

但我还需要在渲染的视图布局文件中访问它们。

在index.hbs中,我渲染了一堆像这样的页面......

{{render "page-01"}}
{{render "page-02"}}
{{render "page-03"}}
...

并且每个都有一个视图文件,告诉它使用像这样的页面布局文件

import Ember from 'ember';

export default Ember.View.extend({
    layoutName: 'page'
});

但是当我尝试使用这种技术引用应用程序属性时,在每个page.hbs文件中

在页面控制器文件

import Ember from 'ember';

export default Ember.Controller.extend({
    needs: 'application'
});

在page.hbs把手文件

<p>{{controllers.application.fullDateToParse}}</p>

我首先想到的是,这些页面使用的page.hbs布局文件可能没有正确连接到控制器?或者也许嵌套的布局和我渲染它的方式都是关闭的。

1 个答案:

答案 0 :(得分:0)

我相信通过致电{{render 'page-01'}},您告诉Ember使用page-01控制器呈现page-01模板。您可以使用Ember inspector查找。

您可能能够以某种方式修复此问题,但更好的解决方案是将您的网页设置为components,并明确传递其依赖项:

{{x-page fullDate=fullDateToParse}}

然后,在您的x-page组件模板中,您可以使用

{{fullDate}}

注意,根据应用中page的实际情况,组件的名称可能比x-page更好