Javascript 如何从Google API中为Ember中的自动完成字段获取数据

Javascript 如何从Google API中为Ember中的自动完成字段获取数据,javascript,ember.js,Javascript,Ember.js,我的最终目标是在网站的主页上有一个文本字段,用于监听输入,每次击键都会从Google的Places API获取数据,并将列表发布到主页上。我目前正尝试为此使用computed属性,但似乎遇到了绑定未等待API请求返回的问题 我一直在阅读承诺,但不确定如何将其纳入我的控制器 这是我目前的尝试: App.IndexController = Ember.Controller.extend service: new google.maps.places.AutocompleteService()

我的最终目标是在网站的主页上有一个文本字段,用于监听输入,每次击键都会从Google的Places API获取数据,并将列表发布到主页上。我目前正尝试为此使用computed属性,但似乎遇到了绑定未等待API请求返回的问题

我一直在阅读承诺,但不确定如何将其纳入我的控制器

这是我目前的尝试:

App.IndexController = Ember.Controller.extend
  service: new google.maps.places.AutocompleteService()
  searchText: ''

  searchResults: (->
    # service = new google.maps.places.AutocompleteService()
    @get('service').getPlacePredictions({input: @get('searchText')}, (predictions, status)->
      console.log(predictions)
    )
  ).property('searchText')
控制台正确地记录结果,但searchResults属性不会更新

我的问题是如何在API请求成功后更新绑定,这是组织此逻辑的最佳方式吗


感谢您的关注。

我不确定余烬数据是否接受承诺作为属性值,但您可以尝试将
google.maps.places.AutocompleteService
响应包装在RSVP承诺中进行测试

这是另一个应该有效的解决方案。特别注意胖箭头和
@set

searchResults: (->
  @get('service').getPlacePredictions({input: @get('searchText')}, (predictions, status)=>
    @set('searchResults', predictions)
  )
).property('searchText')

根据Pooyan的提示,这就是我最终要做的:

App.IndexController = Ember.Controller.extend
  service: new google.maps.places.AutocompleteService()
  searchText: ''
  results: null

  searchTextChanged: (->
    if @get('searchText').length
      @get('service').getPlacePredictions({input: @get('searchText')}, (predictions, status) =>
        console.log("update map here...")
        @set('results', predictions)
      )
    else
      @set('results', null)
  ).observes('searchText')

基本上,我用一个观察者来监视我的文本字段。当文本字段改变时,我们会调用谷歌的服务获取结果。然后,我们将这些结果设置为results属性。

是否尝试从属性声明返回承诺?如果有效,这是一种更好的方法。如果无效,我相信您可以向Ember Data repo发送PR,他们会接受。@PooyanKhosravi,我不确定如何准确设置。你能举个例子吗?