我有一条路由,使用Ajax(不是Ember Data)从服务器中提取一条记录costcentre
。该记录旨在为以后的编辑填充模板。
在获取之前,在beforeModel
中,使用costcentre
创建了一个空的createRecord
。 model
处理完成后,在afterModel
中,返回的数据用于填充数据存储区中的costcentre
对象。
数据获取成功,并且在调试器中可以看到本地存储的DS对象的更新已起作用,但是在模板中看不到更改。
如何获取模板以填充服务器返回的数据?
在路线上我有这个:
beforeModel: function(transition) {
this.set('ccToEdit', this.store.createRecord('costcentre'));
},
model(params) {
return getCCByCCIdent( this.urlbase,
this.currentMOP.currentMOP,
ENV.APP.MATClientCode,
params.cceIdentifier_to_edit);
},
afterModel(ccs, transition) {
//I'm testing this with an API end point that returns a
//list but there will only ever be one item in the list
this.ccToEdit.setProperties(ccs[0]);
},
getCCByCCIdent
看起来像这样:
export const getCCByCCIdent = function(urlbase, currentMOP, clientCode, targetCostCentreIdent) {
return new Promise(function (resolve, reject) {
if (targetCostCentreIdent.length == 0)
{
resolve([])
}
else
{
var theUrl = `${urlbase}/costcentres/${currentMOP}/${clientCode}/${targetCostCentreIdent}`;
$.ajax({
type: 'GET',
url: theUrl,
success: function (response) {
resolve(response);
},
error: function (request, textStatus, error) {
reject(error);
}
});
}
})
}
答案 0 :(得分:0)
最简单的方法是对Ajax调用返回的诺言进行then()
,然后设置适当的值,然后返回模型:
model(params) {
return getCCByCCIdent(
this.urlbase,
this.currentMOP.currentMOP,
ENV.
params.cceIdentifier_to_edit
).then(ccs => {
let costCentre = this.store.createRecord('costcentre');
costCentre.setProperties(ccs[0]);
return costCentre;
});
},