2017-09-14 1 views
0

사용자가 요청할 때 데이터를 업데이트 할 수있는 경로가 있다고 가정 해 봅니다 (백엔드가 동일한 통화에 대해 다른 데이터를 반환한다고 가정합니다. 그냥 임의의 숫자).EmberJS : 데이터 모델을 새로 고치면 연결된 계산 된 속성이 업데이트되지 않음

export default Ember.Route.extend({ 
    model() { 
    return this.get('store').findAll('foo'); 
    }, 

    actions: { 
    invalidateModel() { 
     this.refresh(); 
    } 
    } 
}); 

이 모델을 직접 사용하는 구성 요소는 예상대로 뷰를 업데이트합니다.

그러나 구성 요소가 모델을 관찰하는 계산 된 속성을 사용하는 경우 업데이트가 수행되지 않습니다.

템플릿

Model: {{#each computedModel as |m|}}{{m}}{{/each}} 
<br> 
<button {{action "refreshModel"}}>Refresh model</button> 

전체 생식 용 구성 요소

computedModel: Ember.computed('model', function() { 
    return this.get('model').map(function(m) { 
    return `Computed: ${m.data.bar}`; 
    }); 
}), 

, 당신은 체크 아웃 할 수있다 : 비 작동 계산 된 속성의 경우 https://github.com/myartsev/ember-computed-properties-on-data-model

를 최신 커밋이다 .
previous commit은 모델을 직접 사용할 때 모든 것이 올바르게 작동하는 것입니다.

무엇이 누락 되었습니까?

답변

0
computedModel: Ember.computed('[email protected]', function() { 
    return this.get('model').map(function(m) { 
    return `Computed: ${m.data.bar}` 
    }); 
}) 

를 읽으십시오; @Subtletree의 대답은 매우 가까웠고 올바른 길을 생각하게되었습니다.

차이점은 미묘하지만 중요하지만, model.[]은 반환되는 데이터 크기가 변경된 경우에만 작동합니다. 요소가 추가되거나 제거됩니다. 필자의 경우 반환 된 데이터의 크기는 일정하게 유지되며 값만 업데이트됩니다. 그래서 올바른 방법은 당신이 찾고있는 의존 키 (이 경우, 'model. @ each.bar')를 듣는 것입니다.

2

계산 된 속성이 배열 자체의 변경 내용을 수신 대기 중입니다. model.[]

https://guides.emberjs.com/v2.15.0/object-model/computed-properties-and-aggregate-data/#toc_code-code-vs-code-each-code

computedModel: Ember.computed('model.[]', function() { 
    return this.get('model').map(function(m) { 
    return `Computed: ${m.data.bar}`; 
    }); 
}), 

UPDATE

Here is a twiddle는 상기 용액이 문제를 해결한다는 표시로 배열 항목에 대한 변경을 수신 시도.

마지막으로 작동하지 않는 경우 API가 반환하는 것과 관련된 문제가 있습니다.

조치를 보내는 방법에 대한 의견에 따라. 2 년 전 익숙하지 않은 syntax from Ember 1.13을 사용하고 있습니다.

나는 당신이 루프를 닫으려면 the docs for the version you are running Ember 2.15

+0

아직 엠버 슬랙에 가입해야합니다. https://ember-community-slackin.herokuapp.com/ :) – Subtletree

+0

이것을 시도 했습니까?그것은 작동하지 않습니다 : (ember 데이터 모델은 배열이 아닌 클래스입니다 (적어도 클래스에는 배열이 있습니다) – myartsev

+0

당신은 컴포넌트에 정확하게 액션을 보내지 않고 있습니다. – Subtletree

관련 문제