2016-11-04 2 views
0

@EmberJS 2.6EmberJS: Асинхронный Модель

В настоящее время им делать это

import Ember from 'ember'; 

export default Ember.Route.extend({ 

    model: function() { 
     ... 
     var ajax_response = Ember.$.ajax(url, { 
      "type": 'POST', 
      "async": false, 
      "headers": { 
      "Authorization": _auth_header 
      }, 
      "data": JSON.stringify(data), 
      "contentType": "application/json" 
     }); 
     if (ajax_response.hasOwnProperty("responseJSON")) { 
      var response = ajax_response.responseJSON; 

      if (response.hasOwnProperty("status") && response.status === success_status) { 
      response = response.result; 

      if (typeof response === "object") { 
       return response; 
      } 
      } 
     } 
    } 
}); 

Проблема в том, что если вызов занимает слишком много времени, чтобы вернуть приложение является по существу «замороженных». Я хочу изменить этот кусок кода для работы асинхронного один, имея страница оказывается, и когда обещание возвращается для заполнения:

{{#each model as |transaction|}} 
.... 

ответ

1

Если не углубляясь, ваш код может быть изменен так:

import Ember from 'ember'; 

export default Ember.Route.extend({ 

    model: function() { 
    return []; 
    }, 
    setupController: function(controller, model) { 
     controller.set('model',model); 

     //here you can fire loader in template based on isLoading in controller; 
     controller.set('isLoading',true); 

     ... 
     var ajax_response = Ember.$.ajax(url, { 
      "type": 'POST', 
      "async": false, 
      "headers": { 
      "Authorization": _auth_header 
      }, 
      "data": JSON.stringify(data), 
      "contentType": "application/json" 
     }); 
     if (ajax_response.hasOwnProperty("responseJSON")) { 
      var response = ajax_response.responseJSON; 

      if (response.hasOwnProperty("status") && response.status === success_status) { 
      response = response.result; 

      if (typeof response === "object") { 
       controller.set('isLoading',false); 
       controller.get('model').pushObjects(response); 

      } 
      } 
     } 
    } 
}); 
Смежные вопросы