2016-08-21 5 views
3

--Using 엠버 데이터 2.7.1--Ember.JS은 - : 나는 컬렉션의 순서를 반대로하는 것을 시도하고 기록의 수집

를 반전하려고 '형식 오류는 internalModel.getRecord는 함수가 아닙니다' toArray()를 사용하여 레코드를 배열로 바꾸지 않고 레코드를 저장합니다. 이 객체 컬렉션은 this.store.findAll ('history-item')에 의해 반환 된 약속에서 비롯됩니다.

나는 이것을 보통 자바 스크립트로 만드는 대신에 엠버 방식으로하고 싶다. TypeError : internalModel.getRecord가 record-array.js에서 나옵니다. 어떤 이유로 objectAtContent()를 수행하려고 할 때 찾고있는 내용이 형식이없는 것처럼 보입니다. 스택 추적을 통해 내가 다루고있는 객체가 [Class] 인 것을 알 수있다. 클래스는 히스토리 아이템 모델이다. objectAtContent() 전에 스택을 몇 번 호출하면 이력 항목 모델에서 유형 속성이없는 다른 Class 객체로 전환됩니다.

Ember Inspector를 사용하여 데이터를 올바르게 볼 수 있으며 템플릿의 원본 컬렉션을 방금 표시 한 경우 올바르게 표시됩니다.

누구에게이 문제가 있습니까?

어떤 생각과 고려 사항 : findall은()가 백그라운드에서 다시로드되기 때문에 역전을 허용하지 않는 약속과 함께 작동하는 방법에 대한

가 결정됨 어떤 특별한? 라이브 데이터를 다시로드하고 싶습니다.

저는 em와 cli-mirage를 사용하여 db와 endpoints를 모의하고 있습니다. mirage에 대해 구성되지 않은 JSONAPISerializer를 사용하고 ember에 대해 구성되지 않은 JSONAPIAdapter를 사용하고 있습니다. 뒷면에서 보낸 메타 데이터와 관련이있을 수 있습니까? 모델이나 레코드를 설정하지 않아도 될까요? 내가해야 할 특별한 것이 있습니까?

모델을 정의하고이를 역으로 시도하는 경로 세그먼트 : [참고 : 경로에서 데이터를 미리 준비하지 않아도된다는 것을 알고 있지만 간단히 설명하기 위해 여기에 입력했습니다.

export default DS.Model.extend({ 
    question: DS.attr('string'), 
    answer: DS.attr('string') 
    }); 

엠버 - CLI-미라지가 끝 지점을 config.js :

this.get('/history-items', (schema) => { 
    return schema.historyItems.all(); 
    }); 

Ember- 나는 보통 컨트롤러 또는 구성 요소]

model(){ 
    return this.get('store').findAll('history-item').then(function(items){ 
     return items.reverseObjects(); 
    }).catch(failure); 

역사 목록 모델 선언에 외부 그것을 할 역사 아이템을위한 Cli-Mirage 픽스처 :

export default [ 
    {id: 1, question: "1is this working?", answer: "Of course!"} 
    } 

오류 : 나는 레코드를 저장 만들려고 할 때

TypeError: internalModel.getRecord coming from record-array.js 

이 문제가 발생합니다. 저장은 성공적이지만 모델이 다시로드되고 리버스를 시도하면 동일한 오류로 실패합니다. 내가 정착물인지 아닌지는 중요하지 않습니다.

컨트롤러 : 나는 toArray 괜찮 사용하여 생각

var newHistoryItem = this.store.createRecord('history-item', { 
    question: question, 
    answer: answer 
    }); 
    newHistoryItem.save().then(success).catch(failure); 

답변

2

이 필요 바퀴를 재발견 없습니다. Ember의 열거 형/배열 방법조차도 toArray을 사용하여 구현됩니다.

저는 컨트롤러/구성 요소에 대한 변환을 유지하기 때문에 Routes는 [URL -> 데이터] 논리에만 관련됩니다.

import Ember from 'ember'; 

export default Ember.Controller.extend({ 

    reversedItems: Ember.computed('model.[]', function() { 
    return this.get('model').toArray().reverse(); 
    }) 
}); 

떨림 : 나는 서버 데이터를 반환 모델 훅을 유지하고, 컨트롤러에 계산 된 속성을 사용하는 것이 여기에 생각 https://ember-twiddle.com/6527ef6d5f617449b8780148e7afe595?openFiles=controllers.application.js%2C

또한 Ember Composable Helpers에서 reverse 도우미를 사용할 수 있고 그것을 할 템플릿 :

{{#each (reverse model) as |item|}} 
    ... 
{{/each}} 
+0

'reverseObjects()'이 (가) 작동해야합니다. 하지만 작동하지 않습니다. 이 예상 된 동작입니까 아니면 이에 대한 추론을 찾았습니까? – kumkanillam

+0

흠, 내 붙박이 twiddle에서 작동하는 것처럼 보입니다. –

+0

'this.store.findAll ('history-item')을 할 때 모델 훅에서 ((items (return items.reverseObjects();})' throwing'TypeError : internalModel.getRecord from record-array.js'..i 귀하의 트위들도 시도했습니다. – kumkanillam

2

결과는 store.findAllstore.query에서 반환은 addObject,addObjects,removeObject,removeObjects, unshiftObject,unshiftObjects,pushObject,pushObjects,reverseObjects,setObjects,shiftObject,clear,popObject,removeAt,removeObject,removeObjects,insertAt 같은 AdapterPopulatedRecordArray (라이브 배열), 돌연변이 방법입니다해야 사용하지 마십시오.

discussionProposed PR 오류가 발생하여 toArray()를 사용하여 변형하는 대신 배열을 복사하라는 제안을 던지십시오.

+0

답장을 보내 주셔서 감사합니다! 이것은 내가 몇 시간 동안 구글을 트롤링 한 후에 온 결론입니다. 나는 일찍 github을보아야했다. –

+0

필자는 적어도 신기루가있는 서버의 경우 findAll()이 AdapterPopulatedRecordArray가 아닌 RecordArray를 반환한다는 것을 발견했습니다. 링크 된 제안 된 PR은 오래되어 보이지 않지만 다른 누군가가 그 토론 후에 AdapterPopulatedRecordArray에 대한 변경 사항을 병합했습니다. store.query 호출에 대한 문제는 해결하지만 findAll()에는 문제가 해결되지 않습니다. –

+0

링크 된 토론에서 설명한 것처럼 store.query()는 live가 아닌 배열을 반환하고 store.filter() 및 store.findAll()은 각각 FilteredRecordArray 및 RecordArray를 반환합니다. 이 두 가지 모두 라이브 배열입니다. 어느 쪽이든, 그것은 RecordArrays가 muttable 수 없어야하지만 FilteredRecordArray 및 AdapterPopulatedRecordArray 만 좋은 오류 메시지로 보호됩니다. –

관련 문제