我有一个模型,我们称之为Task,它有一个财产受让人。我有另一个模型管理员,这是一组管理员。在任务上,我想添加一个属性admin,它通过电子邮件从管理员处查找受理人并返回该管理员。在Ember模型的计算属性中使用承诺
Admin上的主键不是电子邮件,而在Ember Model中,看起来不可能在主键以外的任何键上创建belongsTo
关联。我通过电子邮件发送而不是ID的原因是管理员并不总是存在。
任务模式看起来是这样的:
import Em from 'ember';
import Admin from 'project/models/admin';
import PromiseObject from 'project/lib/promise-object';
var Task = Em.Model.extend({
id: Em.attr(),
name: Em.attr(),
assignee: Em.attr(),
admin: function() {
return PromiseObject.create({
promise: Admin.fetch({ email: this.get('assignee') })
}).then(function(json) {
return Admin.create(json);
}, function() {
return null;
});
}.property('assignee'),
adminName: Em.computed.oneWay('admin.name')
});
export default Task;
PromiseObject只是延长PromiseProxyMixin,看起来像这样:
import Em from 'ember';
export default Em.ObjectProxy.extend(Em.PromiseProxyMixin);
当我尝试访问属性,我可以看到网络管理员通过网络发送请求,我可以看到包含正确详细信息的成功响应。但是,null
是为承诺返回。
我期待在我的模板中包含{{task.adminName}}
。在我的模型中,正确解决管理承诺的最佳方式是在这一点上我有点难住。
您无法在承诺上定义计算属性。相反,请在异步回调处理程序(或'then'子句)中设置属性。 – 2014-11-07 03:42:58