【问题标题】:Ember.js , HighCharts - accessing JSON data from controllerEmber.js , HighCharts - 从控制器访问 JSON 数据
【发布时间】:2014-09-05 19:33:55
【问题描述】:

我需要从模型访问 JSON 数据,我在控制器中使用了“this.model”。从我在控制台日志中看到的“this.model”正在返回数据数组数组。

  App.CardsRoute = Ember.Route.extend({
model: function() {
 return Ember.$.getJSON('/cards');
}
});

这是路径 /cards 上的服务器返回的内容:

[[1317888000000,372.5101],[1317888060000,372.4]]

我想在我的 ember HighStock(来自 HighCharts)实现中使用该数据。它正在使用手动输入的数据绘制图表:

  App.CardsController = Ember.ArrayController.extend({
    series: [{
           name : 'test',
                type: 'area',
                data :[[1317888000000,372.5101],[1317888060000,372.4]],

...

但不是用这个来画画:

App.CardsController = Ember.ArrayController.extend({
series: [{
                name : 'test',
                type: 'area',
                data : this.model,
...

从我在控制台中看到的,this.model 不仅返回包含数据数组的数组,还返回其他特定于灰烬的对象,这是问题所在吗?如果是,那么如何仅访问 JSON 返回的数据以便我可以在控制器中使用它?

【问题讨论】:

  • 第二个控制器 sn-p 中不应该是 this.get('model') 吗?而不是this.model?
  • 我从“this.get('model')”开始,但收到“未捕获类型错误:未定义不是函数”
  • 你能显示console.log(this.model) 的输出吗?
  • [Array[2],Array[2],nextSuper:未定义,__ember_meta:对象,ember1409946321702:“ember410”,_super:函数,nextObject:函数…] 0: Array[2] 0: 1317888000000 1: 372.5101 长度: 2 __proto: Array[0] 1: Array[2] 0: 1317888060000 1: 372.4 长度: 2 proto : Array[0] ember1409946321702: "ember410" __ember_meta: Object nextSuper: undefined length: 2 __proto: Array[0]
  • 能否请您创建一个emberjs.jsbin.com 小提琴,我们可以看到实际问题?

标签: javascript arrays json ember.js highcharts


【解决方案1】:

promise成功后,你可以直接在你的路由器中格式化数据。

当控制器初始化时,这个方法也将运行一次并初始化。 要从控制器本身设置数据,请在 json 承诺成功后格式化数据。 例如:

 App.CardsRoute = Ember.Route.extend({
   model: function() {
   return Ember.$.getJSON('/cards');
   }.then(function(data){
     return [{
           name : 'test',
           type: 'area',
           data : data,
           ...
         }]
 });

在控制器中执行此操作

代码粘贴在jsbinhttp://jsbin.com/vekacayirugu/16/edit

这种格式适合您。 参考:http://emberjs.com/guides/object-model/computed-properties-and-aggregate-data/

【讨论】:

  • 我已经做了你发布的事情(将系列的所有内容从控制器移动到模型并使用数据)然后我在控制器中做了“系列:函数(){this.get('model')} .on('init')" 但还是和之前一样,空图表没有任何数据
  • 你现在不需要做任何事情了,this.model 会以你需要的格式将数据从路由器返回给控制器。您可以直接在模板中使用该数据进行检查。见我上面的回答。
  • 与 "series: this.model" 完全一样,也许我会在 jsbin 中这样做?让你看得更清楚
  • 如果您想访问控制器内部的数据,请执行此操作。 App.CardsController = Ember.ArrayController.extend({ actions: { series: function(){ return this.get('model');} } });这将起作用。
  • 不,和之前一模一样。图表仍然没有数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-06
  • 1970-01-01
  • 2016-02-14
  • 1970-01-01
相关资源
最近更新 更多