Javascript 如何从Google API中为Ember中的自动完成字段获取数据
我的最终目标是在网站的主页上有一个文本字段,用于监听输入,每次击键都会从Google的Places API获取数据,并将列表发布到主页上。我目前正尝试为此使用computed属性,但似乎遇到了绑定未等待API请求返回的问题 我一直在阅读承诺,但不确定如何将其纳入我的控制器 这是我目前的尝试: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()
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,我不确定如何准确设置。你能举个例子吗?