无法访问控制器中的模型属性

时间:2015-05-05 19:17:00

标签: json ember.js model controller

我有一个组件从我的控制器获取一些当前的灯具数据,如此

{{vertical-graph metrics=controller.total_sessions_comparison}}

控制器属性如下所示

total_sessions_comparison: [
    [
        {
            metricNumber: "26%",
            metricText: "September",
            metricStyle: "height: 26%"
        },
        {
            metricNumber: "22%",
            metricText: "October",
            metricStyle: "height: 22%"
        },
    ],
    [
        {
            metricNumber: "74%",
            metricText: "September",
            metricStyle: "height: 74%"
        },
        {
            metricNumber: "78%",
            metricText: "October",
            metricStyle: "height: 78%"
        }
    ]
],

我的路由器中的模型钩子正在加载来自这样的自定义api的数据

return Ember.$.getJSON('http://127.0.0.1:3000/api');

目前我的API正在返回看起来像这样的JSON

{
"total_sessions": 288,
"current_month": "May",
"current_month_year": "2015",
"last_month": "December",
"last_month_year": "2014"
}

我可以很好地访问模板中的模型数据(这些都在索引下)但我在理解如何在控制器属性中获取月份名称时遇到一些问题,而不是硬编码它们使用的那些通过API动态传递。模型属性看起来像current_monthlast_month,就像我说模板中的工作一样,但我不能让它们在控制器中工作。

或者是否有更好的方法可以做到这一点,而不是我现在的那样会让这更容易?

1 个答案:

答案 0 :(得分:1)

好的,默认情况下,路由中model挂钩返回的内容被设置为相应控制器上的model属性。这是通过内置的setupController(controller, model)钩子完成的。如果要在控制器上设置更多属性或需要更精细的控制,请随意覆盖setupController。例如,您的json被解析为一个对象,该对象在promise解析时被设置为模型。要将控制器上的current_month变量设置为此值,您可以:

setupController: function(controller, model){
    controller.set('current_month', model.current_month);
}

您不再需要设置模型,除非您在被覆盖的this._super(controller, model)setupController(如果需要)。