2014-01-06 5 views
1

서버에서 여러 레코드를 가져온 후 (배열) 컨트롤러로 넘겨 씁니다. 레코드 배열이 표에 표시되고 레코드 순서는 끌어 놓기로 수정할 수 있습니다. 각 드롭 후에 각 레코드의 sort 특성이 새 정렬 순서를 반영하도록 업데이트됩니다.Ember Data가 기존 레코드에 대해 POST를 수행하는 이유는 무엇입니까?

레코드를 저장하면 일부 레코드에 대해 PUT 요청이 발생하고 다른 레코드에 대해서는 POST 요청이 트리거됩니다. 이것의 원인이 무엇일까요? 이상한 점은 POST 요청에 해당 레코드의 id이 포함되어 있다는 것입니다. 유효한 id이있는 레코드가 PUT 요청을 발생 시킨다는 가정하에있었습니다.

명확하게 말하면 Ember Data를 응용 프로그램의 모델 계층으로 사용합니다.

App.ProjectsIndexController = Ember.ArrayController.extend({ 
    sortProperties: ['sort'], 

    updateSortOrder: function() { 
    this.beginPropertyChanges(); 
    this.forEach(function(project) { 
     // UPDATE PROJECT 
    }, this); 
    this.endPropertyChanges(); 

    this.forEach(function(project) { 
     project.save(); 
    }); 
    } 
}); 

UPDATE

: 좀 더이 문제를 디버깅 후, 나는 엠버 데이터가 POST 요청이 발사되는 이유를 설명하는 기록 중 하나에 대한 새로운 레코드를 작성 것으로 나타났습니다. 그러나 유효한 id이있는 기존 레코드에 대해 레코드가 생성 된 이유는 분명하지 않습니다.

+0

음 ..'id'가 설정되었다고해서 Ember가 정의에 따라 그것이 기존 레코드라고 가정하고 PUT을 사용한다는 것을 의미하지는 않습니다. 조금 더 많은 코드/컨텍스트를 보게되었습니다. jsbin을 만들려면 http://jsbin.com/ogorab/316/edit의 템플릿 데이터가 필요합니다. –

+0

사실입니다. 그러나 'id'는 초기 가져 오기의 응답에 포함되어 있으며 Ember Data가 기존 레코드임을 나타내는 것이어야합니다. –

답변

2

Ember 데이터는 상당히 복잡한 모델 레이어이며 내가 경험 한 버그는 저의 경험이 부족한 결과입니다.

내 모델 중 하나에서 isNew이라는 이름의 계산 된 속성을 만들었습니다. 나는 더 나은 이름을 골랐어 야했다. 모든 Ember Data 모델에는 isSaving, isDirty, isLoadedisNew과 같이 모델 상태에 대한 정보를 반환하는 여러 가지 메소드가 있습니다. 모델은 새로운 기록 (저장시 POST 요청을 트리거)하거나 기존 레코드 (저장할 때 PUT 요청을 트리거)를 때 내 모델 클래스에 isNew 방법을 재정 의하여

, 나는 가게를 알렸다. 모델의 속성 목록 인 at the Ember website을 찾을 수 있습니다.

관련 문제