2017-10-10 2 views
0

Ember Data를 사용하기에 적합하지 않은 것으로 보이는 기존 API에서 Ember CLI를 사용하여 데이터를로드하려고합니다. 이 데이터는 일반적으로 페이지가로드 된 후 앱 전체의 여러 위치에서 다시 사용될 때로드됩니다. 나는이에 대한 서비스 'legacy_data'을 만들었습니다emberjs를 사용하여 지연된 서비스를 사용할 수 있습니까?

import Ember from 'ember'; 

export default Ember.Service.extend({ 
    ready: null, 
    legacy_data: null, 

    init(){ 
    this.ready = Ember.$.ajax(...).done(function(legacy_data){ 
    this.set('legacy_data', legacy_data); 
    } 

    computed_attr: Ember.computed('legacy_data', function(){ ... }, 

    ...more functions and computed attributes 
}); 

때문에 '초기화하기'기능이 약속 반환을 지원하지 않는 것 같습니다 (경로에 모델 후크처럼 않습니다), 나는이 서비스를 사용할 때마다, 나는 이런 식으로 뭔가를 할 필요가 :

실제로 내 코드베이스에서 추가 약속 처리의 전체 무리와 함께 끝을 의미
injected_service.ready.then(function(legacy_data){ 
... use service 
}); 

-이 일에 현재에 수영하고있다처럼 느낀다.

더 좋은 방법이 있나요? 아마도 지연된 서비스 초기화를 지원하는 라이프 사이클 훅이나 팩토리/이니셜 라이저 일 수도 있습니다. 따라서 코드베이스의 다른 곳에서도 걱정할 필요가 없습니까? 이니셜 라이저가 이것을 지원합니까? 나는 그것의 어떤 예에서도 그것을 보지 못했다. 이 문제를 해결하기위한 또 다른 방법이 있습니까? (엠버 데이터는 어떻게 든이 같은 문제를 처리해야하지만 프레임 워크를 처음 사용하므로 확실하지 않습니다.)

도움 주셔서 감사합니다.

답변

1

Ember에서 Route 's는 beforeModel, model, afterModel과 같은 고리를 가지고 있습니다. 이 고리들로부터 약속들을 되 돌리면 Ember가 약속의 처리를합니다.

그런데 Ember Data를 사용하는 경우에도 store으로 전화를해야합니다. 구성 요소의 상점에 액세스하는 경우 다시 약속을 처리해야합니다.

그러나 약속이 해결 될 때까지 신청서를 연기 할 방법을 요청하고 있습니다. 이는 application route s beforeModel 후크로 수행 할 수 있습니다. (내 클라이언트 응용 프로그램에서 사용자 권한을 검색하려면이 필요했습니다. 모든 경로 내에서 권한 약속 처리를 배치 할 수 없으므로 내 application route 넣어.) 따라서, this twiddle 좀 봐.

1

init 후크의 코드를 loadData (또는 원하는 이름)으로 이동 한 다음 응용 프로그램 경로의 beforeModel에서이 함수를 호출해야한다고 생각합니다. 이렇게하면 데이터가 항상로드됩니다.

관련 문제