从 Ember 中的控制器访问模型

Accessing a model from a controller in Ember

我有一个非常基本的设置,我试图在我的控制器中设置日期格式。问题是我无法在下面的 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}}

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

所以:

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