ember.js`afterModel`事件处理程序更改未反映在模板中

时间:2019-07-31 03:10:10

标签: ajax ember.js promise

我有一条路由,使用Ajax(不是Ember Data)从服务器中提取一条记录costcentre。该记录旨在为以后的编辑填充模板。

在获取之前,在beforeModel中,使用costcentre创建了一个空的createRecordmodel处理完成后,在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);
          }
        });
    }
  })
}

1 个答案:

答案 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;
  });
},