从Ember中的控制器访问模型

时间:2015-02-17 19:21:28

标签: ember.js

我有一个非常基本的设置,我正在尝试在Controller中格式化日期。问题是我无法在下面的formattedStart函数中访问它,而我可以在summaryRowAction处理程序中访问它。这让我感到困惑,因为两个地方的console.logging this给出了相同的结果。但由于formattedStart内部的某些原因,this.get('model.startDate')未定义。

App.SummaryRowController = Ember.ObjectController.extend({
    formattedStart: function(){
        console.log(this.get('model.startDate');)
        return this.get('model.startDate');
    }.property(),

    actions: {
        summaryRowAction: function(){
            console.log(this.get('model.startDate'));
        }
    }
});

这是我的模型和我的模板(在Jade中)供参考:

App.PricingSummary = DS.Model.extend({
    startDate: DS.attr(),
    endDate: DS.attr(),
    days: DS.hasMany('day', {async: true}),
    property: DS.belongsTo('property', {async: true})
});

script(type="text/x-handlebars", data-template-name="summaryRow")
    .summaries__summary("{{action 'summaryRowAction'}}")
        .summaries__summary--item{{formattedStart}} — {{endDate}}

1 个答案:

答案 0 :(得分:0)

这是因为评估属性的第一个(也是唯一一个)时间model实际上是null。您需要将startDate指定为属性中的依赖项,以便Ember知道在数据更改时重新评估。此外,您在对象控制器中不需要model.*,属性会自动委托给content / model

所以:

formattedStart: function(){
    console.log(this.get('startDate');)
    return this.get('startDate');
}.property('startDate'),