cod*_*rts 3 ember.js ember-data
我正在尝试调用外部API,并将结果用作Ember Data模型中的计算属性。可以很好地获取结果,但是在Promise解析之前返回了计算的属性,从而导致未定义。这是观察员的用例吗?
export default DS.Model.extend({
lat: DS.attr(),
lng: DS.attr(),
address: Ember.computed('lat', 'lng', function() {
var url = `http://foo.com/json?param=${this.get('lat')},${this.get('lng')}`;
var addr;
var request = new Ember.RSVP.Promise(function(resolve, reject) {
Ember.$.ajax(url, {
success: function(response) {
resolve(response);
},
error: function(reason) {
reject(reason);
}
});
});
request.then(function(response) {
addr = response.results[0].formatted_address;
}, function(error) {
console.log(error);
})
return addr;
})
});
Run Code Online (Sandbox Code Playgroud)
使用DS.PromiseObject。我一直使用以下技术:
import DS from 'ember-data';
export default DS.Model.extend({
...
address: Ember.computed('lat', 'lng', function() {
var request = new Ember.RSVP.Promise(function(resolve, reject) {
...
});
return DS.PromiseObject.create({ promise: request });
}),
});
Run Code Online (Sandbox Code Playgroud)
将模板中的已解析值用作{{address.content}},这将在代理Promise解析后自动更新。
如果您想在此处执行更多操作,建议您查看社区中其他人在做什么:https : //emberobserver.com/?query=promise
构建一个简单的Component接受一个a DS.PromiseObject并在Promise仍处于待处理状态时显示一个加载微调器,然后在Promise解析后显示实际值(或屈服于一个块),这并不是很困难。
我正在使用Ember.Service的应用程序中有一个应用程序,它几乎完全由计算属性组成,这些属性返回包装在DS.PromiseObjects中的Promises。它出奇地无缝地工作。