2017-12-24 28 views
0

하나가 존재하지 않으면 레코드를 만들려고하지만 계산 된 속성을 렌더링하려고 시도 할 때 jQuery.Deferred exception을 계속 가져 오는 계산 된 속성이 있습니다. 여기 Ember-data : 레코드가 없으면 만듭니다.

는 지금까지이 작업은 다음과 같습니다

내 템플릿 그런
deadlineDay: computed(function() { 
    const oneWeekFromNow = moment().startOf('day').add(1, 'week'); 
    const store = this.get('store'); 

    return store.queryRecord('deadline-day', { 
    filter: { 
     date: oneWeekFromNow 
    } 
    }).then(result => { 
    if (!result) { 
     result = store.createRecord('deadline-day', { 
     date: oneWeekFromNow 
     }); 

     result.save(); 
    } 

    return result; 
    }); 
}), 

나는 간단한 도우미로 렌더링을 시도하고있어 다음 {{display-date}} 도우미 그냥 return date.format('dddd, MMM Do')

를 호출

{{display-date deadlineDay.date}} 

Ember가 해결하기를 기다리는 대신 약속 자체를 렌더링하려고 시도하는 것 같습니다.

.format은 약속 방법이 아니기 때문에 오류가 발생합니다.

이것은 매우 일반적인 유스 케이스라고 생각하지만 이해가 부족합니다. 많은 도움을 주셨습니다!

나는 관련이 있는지 확실하지 않습니다,하지만 내 백업 저장소는 ember-local-storage

답변

1

내가 엠버가 약속 자체 대신 약속 해결하기 위해 기다리고 렌더링을 시도 할 수 있음에 동의를 통해 sessionStorage입니다. 죄송 합니다만 현재이 오류를 재현 할 수 없습니다.

Ember.js에서는 일반적으로 경로 파일에 데이터 호출을 배치하는 것이 좋습니다. 이렇게하면 템플릿 파일을로드하기 전에 쿼리/저장 및 다른 모든 데이터 수집을 수행 할 수 있습니다. 묘사 된 계산 된 속성에는 종속 키가 표시되지 않으므로 시나리오의 경로 파일로 호출을 이동하는 것이 정당 할 수 있습니다.

일반적인 route.js 예제 : 계산 된 속성 내 약속이 사용의 경우

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    async model() { 
    let record; 
    record = await this.store.queryRecord('record', { queryParams }); 

    if (!record) { 
     record = this.store.createRecord('record', { properties }); 
    } 

    return record.save(); 
    }, 

}); 

그러나, 엠버 점화의 저자는 가치가있을 수있는 몇 가지 유용한 추가 지침이있을 수 있습니다. The Guide to Promises in Computed Properties