我有一個模型,我們稱之爲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