Asynchronous 余烬:在控制器中使用异步数据
我在一个Ember控制器中有一个异步调用,Asynchronous 余烬:在控制器中使用异步数据,asynchronous,ember.js,Asynchronous,Ember.js,我在一个Ember控制器中有一个异步调用,@authSession.currentUser.clients。然后过滤此请求的结果以填充下拉菜单 filterClientsBy: (term) -> filter = new RegExp("^#{term}", 'i') @authSession.currentUser.clients.filter (client) -> filter.test(client.displayName) 问题是过滤器第一次不工
@authSession.currentUser.clients
。然后过滤此请求的结果以填充下拉菜单
filterClientsBy: (term) ->
filter = new RegExp("^#{term}", 'i')
@authSession.currentUser.clients.filter (client) ->
filter.test(client.displayName)
问题是过滤器第一次不工作,因为它不等待客户端从服务器返回。我觉得我错过了一些基本的恩伯在这里。看起来客户端是一个
ModelArray
。我能把这当作一个承诺吗?在呈现我的模板之前,有没有办法将这些数据引导到控制器中?好的,这里有几件事可以做
因为其中有一个异步调用,所以您需要使用承诺,以等待客户机关系恢复。(假设您在模型中的客户机关系上设置了“async”)
这给您留下了几个选项(我用javascript编写了这些选项,并将它们转换为coffeescript,所以看起来可能有点奇怪):
1) 返回“filterClientsBy”的承诺,如下所示:
2) 您可以在控制器上创建一个名为“FilteredClient”的属性,该属性设置在上面已解析的“客户端”承诺块中(而不是返回承诺)
filterClientsBy: (term) ->
self = this
filter = new RegExp("^" + term, "i")
new Ember.RSVP.Promise((resolve, reject) ->
self.authSession.currentUser.clients.then (clients) ->
filteredList = clients.filter((client) ->
filter.test client.displayName
)
resolve filteredList
return
return
)
filterClientsBy: (term) ->
self = this
filter = new RegExp("^" + term, "i")
self.authSession.currentUser.clients.then (clients) ->
filteredList = clients.filter((client) ->
filter.test client.displayName
)
self.set "filteredClients", filteredList
return
return