部署到Heroku的Ember App不从REST API加载数据

时间:2014-09-10 04:35:57

标签: ember.js

提前感谢您的帮助。

我对一个简单的Ember应用程序有一个奇怪的问题,在部署到Heroku之后,我的模型只在模型的索引路径被命中后才进行REST调用。

例如,我有两个模型:ResortForecast。每个belongsTo关系都是Resort,因此每个Forecast都有/forecasts,反之亦然。在度假村模板中,有指向相应预测的链接。单击时,它会正确路由到预测,但预测中的所有属性都是未定义的,因为它从未进行API调用以检索预测JSON blob。我可以在Chrome工具中查看网络标签来验证这一点。当我导航到import DS from "ember-data"; var ApplicationAdapter = DS.ActiveModelAdapter.extend({ host: 'http://api.firstchair.io', buildURL: function() { var base; base = this._super.apply(this, arguments); return "" + base + ".json"; } }); export default ApplicationAdapter; 时,会进行REST调用,并填充数据。

无论出于何种原因,所有的API调用都是按照我的预期进行的。一旦部署到Heroku,情况并非如此。

此应用使用的是ember-cli,相关代码如下:

/adapters/application.js

import DS from 'ember-data';

export default DS.Model.extend({
  name: DS.attr('string'),
  state: DS.attr('string'),
  latitude: DS.attr('string'),
  longitude: DS.attr('string'),
  region: DS.attr('string'),
  token: DS.attr('string'),
  weather: DS.attr('string'),
  temperature: DS.attr('string'),
  last_24_hours_snowfall: DS.attr('string'),
  last_48_hours_snowfall: DS.attr('string'),
  last_72_hours_snowfall: DS.attr('string'),
  wind: DS.attr('string'),
  conditions: DS.attr('string'),
  baseDepth: DS.attr('string'),
  humanReadableWeather: DS.attr('string'),

  forecast: DS.belongsTo('forecast'),

  fullDescription: function() {
    return this.get('name') + ', ' + this.get('state');
  }.property('name', 'state'),

  currentSnowfall: function() {
    return (this.get('last_24_hours_snowfall') || 0) + '"';
  }.property('last_24_hours_snowfall'),

  hasWind: function() {
    return this.get('wind') > 0;
  }.property('wind')
});

/models/resort.js

import DS from 'ember-data';

export default DS.Model.extend({
  startsAt: DS.attr('string'),
  endsAt: DS.attr('string'),
  weather: DS.attr('array'),
  highs: DS.attr('array'),
  lows: DS.attr('array'),

  resort: DS.belongsTo('resort'),

  days: function() {
    var weather = this.get('weather');
    var highs = this.get('highs');
    var lows = this.get('lows');

    if (!weather) { return []; }

    return weather.map(function(currWeather, index) {
      return {
        weather: currWeather,
        high: highs[index],
        low: lows[index],
        daysSince: index
      };
    });
  }.property('weather', 'highs', 'lows')
});

/models/forecast.js

import Ember from 'ember';

export default Ember.Route.extend({
  model: function(params) {
    var resort = this.store.find('resort', params.resort_id);
    console.log(resort);
    console.log(resort.forecast);
    return resort;
  }
});

/routes/resort.js

import Ember from 'ember';

export default Ember.Route.extend({
  model: function() {
    return this.store.findAll('resort');
  }
});

/routes/resorts.js

import Ember from 'ember';
export default Ember.Route.extend({
  model: function(params) {
    console.log('hello');
    return this.store.find('forecast', params.forecast_id);
  }
});

/routes/forecast.js

import Ember from 'ember';

export default Ember.Route.extend({
  model: function() {
    return this.store.findAll('forecast');
  }
});

/routes/forecasts.js

{{1}}

我是否应该采取措施确保数据被急切加载?

您可以在https://github.com/firstchair-io/webapp

查看完整的代码

对于可能出现的问题的任何见解将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

听起来这些关系并没有从后端服务器上下载。因此记录包含hasMany字段中的ID数组,但数据本身不会自动发送。要使Ember数据加载相关记录,请在关系上设置{async: true}