Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asynchronous 余烬:在控制器中使用异步数据_Asynchronous_Ember.js - Fatal编程技术网

Asynchronous 余烬:在控制器中使用异步数据

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) 问题是过滤器第一次不工

我在一个Ember控制器中有一个异步调用,
@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