我们的应用程序中有一个导入过程,由后台服务器处理,但由用户在我们的Ember应用程序中启动。如果转换后导入过程尚未完成,我想发回202响应并让Ember在500毫秒内重新尝试该请求。
我想使用Ember的内部功能来处理此问题(加载路径和常规模型设置器),因此我尝试覆盖RESTAdapter.ajax
方法。我在尝试加载路由时,目前收到通用错误Error while processing route: import
。我怎样才能实现这种行为?
App.ApplicationAdapter = DS.ActiveModelAdapter.extend
ajax: (url, type, options) ->
adapter = this
new Ember.RSVP.Promise((resolve, reject) ->
hash = adapter.ajaxOptions(url, type, options)
hash.success = (json, textStatus, jqXHR) ->
# begin modifications
if jqXHR and jqXHR.status is 202
return Ember.run.later adapter, (->
this.ajax(url, type, options)
), 500
else
# end modifications
return Ember.run null, resolve, json
hash.error = (jqXHR, textStatus, errorThrown) ->
Ember.run null, reject, adapter.ajaxError(jqXHR)
Ember.$.ajax hash
, "DS: RESTAdapter#ajax " + type + " to " + url)
答案 0 :(得分:0)
通过在我的路由的beforeModel
方法中检查我的服务器上的端点,我能够获得所需的功能。如果服务器仍在处理后台作业,则路由器将中止转换并转换到辅助路由,该辅助路由向用户显示一条好消息,并持续检查服务器上的端点,直到该过程完成。完成后,它会转换回原始路线。
App.ImportRoute = Ember.Route.extend
beforeModel: (transition) ->
router = @
$.get('/import/loading', "json").done (data)->
if data
transition.abort()
router.transitionTo('importGateway')
model: (params) ->
@store.find('myModel')
App.ImportGatewayController = Ember.ObjectController.extend
init: ->
@getStatus()
getStatus: ->
controller = @
$.get('/import/loading', "json").done (data)->
if data
Ember.run.later controller, (-> @getStatus()), 500
else
controller.transitionToRoute('import')