来自ajax的ember - load模型未定

时间:2017-10-28 23:28:05

标签: javascript ajax ember.js model

好吧,我需要在ajax请求完成后加载我的模型。

当ajax请求完成后,我将数据推送到商店。推后我需要返回数据并在模板上呈现它。问题是,{{model}}变量为空。

model(params) {
    const controller = this.controllerFor('users.profile');

    return controller.get('session').authorize('authorizer:devise', (headerName, headerValue) => {
        const url = '/api/users/profile/'+this.get('session.data.authenticated.user.id');

        return Ember.$.ajax({
            method: 'GET',
            url: controller.get('backendURL')+url,
            dataType: 'json',
            //data: ,
            contentType: 'application/json',
            beforeSend:  function(xhr) {
                xhr.setRequestHeader(headerName, headerValue);
            },
            success: function(
                this.store.pushPayload('user',data);
                //at this point I can see the user info in the ember inspector addon.
                return Ember.RSVP.resolve(data);//return usr;
            },
            error: function(data){
                controller.get('flashMessages').danger('ERROR, '+ data);
                Ember.$("#loading").hide("slow");
                controller.set('seeTable',false);
            }
        });
    });
}

有什么建议,我的路线有什么不对?

1 个答案:

答案 0 :(得分:0)

$.ajax不返回promise对象,为了使它与Ember model()函数兼容,你应该用Promise对象包装它:

return new Promise((resolve, reject) => {
  $.ajax({
    success() {
      ....
      resolve(data);
    }
  }) 
})

无论如何,我不建议您使用$.ajax,并使用Ember模型加载数据。