提前感谢您的帮助。
我对一个简单的Ember应用程序有一个奇怪的问题,在部署到Heroku之后,我的模型只在模型的索引路径被命中后才进行REST调用。
例如,我有两个模型:Resort
和Forecast
。每个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
查看完整的代码对于可能出现的问题的任何见解将不胜感激。谢谢。
答案 0 :(得分:0)
听起来这些关系并没有从后端服务器上下载。因此记录包含hasMany
字段中的ID数组,但数据本身不会自动发送。要使Ember数据加载相关记录,请在关系上设置{async: true}
。