Json 在Ember中加载和使用枚举值

Json 在Ember中加载和使用枚举值,json,ember.js,enums,Json,Ember.js,Enums,我有一个Ember应用程序使用基于rails的Web服务 在Rails方面,我有一些枚举,它们只是数组。 现在,我想在Ember应用程序中检索这些枚举,并为选择值呈现它们 Web服务返回一个JSON响应: get'/grades.json' {“等级”:[“cp”、“ce1”、“ce2”、“cm1”、“cm2”]} 在余烬一侧,我创建了一条如下的等级路线: App.GradesRoute = Ember.Route.extend({ model: function () {

我有一个Ember应用程序使用基于rails的Web服务

在Rails方面,我有一些枚举,它们只是数组。 现在,我想在Ember应用程序中检索这些枚举,并为选择值呈现它们

Web服务返回一个JSON响应:

get'/grades.json'

{“等级”:[“cp”、“ce1”、“ce2”、“cm1”、“cm2”]}

在余烬一侧,我创建了一条如下的等级路线:

App.GradesRoute = Ember.Route.extend({
    model: function () {
        return Em.$.getJSON('api/v1/grades.json')
    }
}));
然后,我想在使用这些枚举的控制器中需要它:

App.StudentsController = Ember.ArrayController.extend({
    needs: ['grades'],
    grades: Ember.computed.alias('controllers.grades')
}
));
因此,至少我认为我可以在
学生
模板中重复评分

{{#each grade in grades}}
    {{grade}}
{{/each}}
但我没有得到任何输出。。。从模板调试并尝试templateContext.get('grades')。get('model')返回空数组[]


你知道我如何加载和访问这些数据吗?

你只是把一些路径弄混了。在
StudentsController
中,
控制器。等级
指的是实际控制器,而不是其型号。下面的代码应该会把事情弄清楚,因为它在命名方面更加明确

App.StudentsController = Ember.ArrayController.extend({
    needs: ['grades'],
    gradesController: Ember.computed.alias('controllers.grades'),
    grades: Ember.computed.alias('gradesController.model.grades')
});

此外,请注意,只有当您的
成绩
路线是您的
学生
路线的直接家长时,才可以使用
需求
。如果它不是直接的父对象,您将无法获取所需的数据。

因此我最终选择了ApplicationRoute,它是StudentsRoute的直接父对象,因此在这种情况下,需要是相关的

App.ApplicationRoute = Ember.Route.extend({
  setupController: function(controller) {
    Em.$.getJSON('api/v1/enums.json').then(function(data){
      controller.set('grades', data['grades']);
      controller.set('states', data['states']);
    }
  }
}); 
现在,我可以为我需要在我的应用程序中使用的每个枚举创建一个别名

App.StudentsController = Ember.ArrayController.extend({
  needs: ['application'],
  grades: Ember.computed.alias('controllers.application.grades'),
  states: Ember.computed.alias('controllers.application.states')
});

我仍然没有足够的信心来确定这是一条路,欢迎任何建议

多谢各位。尽管如此,由于分数应该是其他模型之间的共享资源,我认为我走错了路。将成绩路线设置为学生的家长是没有意义的。我将尝试使用应用程序控制器来控制分数。你在这里切换到咖啡脚本让人困惑。您可能需要更新问题(或此问题)以匹配语法。抱歉,我的懒惰。。。我最初使用Emberscript进行这个项目,但后来又回到了javascript,原因之一是在这里这样的地方更容易分享和讨论。那么,编辑完成了。