2012-03-19 3 views
1

ember-data를 기반으로 애플리케이션을 작성 중이므로 모든 데이터를 비동기 적으로로드합니다. 그러나 이 사용될 때까지 didLoad 함수가 호출되지 않습니다. 예를 들어 :Ember-data에 비동기 적으로 데이터로드

App = Ember.Application.create(); 
App.Store = DS.Store.create({revision: 3}); 
App.Thing = DS.Model.extend({ 
    didLoad: function(){ 
    alert("I loaded " + this.get('id')); 
    } 
}); 
App.Store.load(App.Thing,{id: "foo"}); 

는 ... 경고를 트리거하지 않으며, findAll 모델을 반환하지 않습니다.

App.Store.find(App.Thing,"foo"); 

didLoad 기능은 트리거, 그것은 App.Store.findAll(App.Thing) 찾을 수 있습니다 : 그러나, 나는 실행합니다.

무슨 일 이니?

+0

나는 이것이 버그라고 생각 될 수 있으며 emberjs의 이슈 추적에서 티켓을 열어야한다고 생각한다. –

+1

또한 최신 버전의 코드를 Github에서 직접 가져 와서 빌드하십시오. 업로드 된 최신 배포본은 2 개월 이상 된 것입니다. –

답변

1

엠버 - 데이터 소스 코드가 잘 설명 :

// A record enters this state when the store askes 
// the adapter for its data. It remains in this state 
// until the adapter provides the requested data. 
// 
// Usually, this process is asynchronous, using an 
// XHR to retrieve the data. 

loading: DS.State.create({ 
    // TRANSITIONS 
    exit: function(manager) { 
    var record = get(manager, 'record'); 
    record.fire('didLoad'); 
    }, 

    // EVENTS 
    didChangeData: function(manager, data) { 
    didChangeData(manager); 
    manager.send('loadedData'); 
    }, 

    loadedData: function(manager) { 
    manager.goToState('loaded'); 
    } 
}), 

이 레코드가 어댑터를 통해로드 할 때 'didLoad는'에만 트리거된다는 것을 의미합니다.

'찾기'메소드는 어댑터에 데이터를 요청합니다. 이는 이미 사용 가능한 데이터 해시 풀에서 찾은 것이므로 이미 제공했기 때문에 찾을 수 있습니다. 그러나 다른 경우에는 데이터가 브라우저에 로컬로 존재하지 않고 서버에 남아있어 어댑터에서 Ajax 요청을 가져 와서 가져옵니다.

: (찾을 예)하지만 완전히 밟아 Store.load을로드 모델 'didLoad'을 유발하기 때문에이 변경되어야한다는 동의

그래서 현재는 어댑터와 함께 작동하는 'didLoad' 꽤 분명해 보인다 ;-)

관련 문제