2014-07-12 9 views
0

궁극적 인 목표는 입력을 수신 대기하는 각 사이트의 홈페이지에 텍스트 입력란을두고 각 Google 입력기에서 Google Places API의 데이터를 가져와 홈페이지에 등록하십시오. 현재이 계산 된 속성을 사용하려고하지만 반환 할 API 요청을 기다리지 않고 바인딩 문제가있는 것 같습니다.Ember의 자동 완성 필드에서 Google API의 데이터를 가져 오는 방법

저는 Promises를 읽고 있었지만 컨트롤러에 통합하는 방법을 잘 모릅니다.

이 내 현재 시도 :

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') 

콘솔이 제대로 결과를 기록하지만의 SearchResult 속성이 업데이트되지 않습니다.

제 질문은 API 요청이 성공한 후 바인딩을 업데이트 할 수있는 방법이며이 논리를 구성하는 최적의 방법입니까?

감사합니다.

답변

1

엠버 데이터가 약속의 가치를 속성으로 받아들이는지 확실하지 않지만, google.maps.places.AutocompleteService 응답을 RSVP 약속으로 포장하여 테스트 해 볼 수 있습니다.

다음은 작동해야하는 또 다른 해결책입니다. 특히 굵은 화살표와 @set에 주목하십시오.

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') 

는 기본적으로, 나는 내 텍스트 필드에 눈을 유지하기 위해 관찰자를 사용 :

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

는 푸얀으로 힌트를 바탕으로, 이것은 내가 함께가는 끝난 것입니다. 텍스트 입력란이 변경되면 결과를 가져 오는 Google 서비스로 전화를 겁니다. 그런 다음 결과를 results 속성으로 설정합니다.

+0

속성 선언에서 약속을 반환하려고 시도 했습니까? 이것은 더 좋은 접근 방법입니다. 제대로 작동하지 않는다면 Ember Data repo에 PR을 보내면 받아 들일 것입니다. –

+0

@PooyanKhosravi, 정확히 어떻게 설치 될지 모르겠습니다. 예를 보여줄 수 있습니까? – jklina

관련 문제