Backbone.Collection에서 저장할 수 없는 하나 이상의 모델 문제 해결

6111 단어 Backbone.jsJavaScript

문제에 관하여

Collection에 저장된Modelattributes 또는 서버의 응답에 대상 구조를 가진 id 속성이 있는지 여부.
있다면 십중팔구 그게 이유겠지.
여기서 중요한 것은 대상 구조를 가진 속성의 명칭이 id라는 것이다.
대상 구조의 id 속성을 가진 대상
{
    id: {
        shopId : 'hogeShop',
        humanId: 'TaroYamada'
    }
}
setメソッド 또는 addメソッド에서 이러한 구조를 가진 대상을 여러 개Collection로 압축하더라도 Collection에 하나만 저장Model한다.
문제가 발생한 코드
var attrs = [
    { id: { shopId : 'hogeShop', humanId: 'TaroYamada' } },
    { id: { shopId : 'hogeShop', humanId: 'JiroTanaka' } }
];
new Backbone.Collection(attrs);

실행 결과(Google Chrome for Windows 40.0.2214.11m)



그룹의 첫 번째만 Model 로 저장합니다.

조사가 아직 끝나지 않았다

Collection.set 주변 코드를 조사한 후CollectionModel를 채우는 과정에서 단축된 역사 기록을 변수에 저장할 때Model.id를 사용했다.
기본값Model.idModel.attributes.id입니다.
이때 Model.id의 값이 대상 구조가 되면 Collection에서 기대하는 동작을 할 수 없다.
주위의 행동을 자세히 읽지 못해서 죄송합니다.
만약 이 부분을 아는 사람이 있다면 평론에서 교수해 주십시오.

대응법

Collection.set에서 비 대상 구조의 값을 지정하면 되기 때문에 모든 Backbone 대상이 자동으로 생성된Model.id을 지정하여 문제를 피하는 것이 좋다.cid 임의의 문자열을 통해 Model.idAttribute의 어떤 값을 Model.attributes로 지정할 수 있습니다.
문제 없는 코드
var attrs = [
    { id: { shopId : 'hogeShop', humanId: 'TaroYamada' } },
    { id: { shopId : 'hogeShop', humanId: 'JiroTanaka' } }
];
new Backbone.Collection(attrs, { model: Backbone.Model.extend({ idAttribute: 'cid' }) });

실행 결과(내용을 확인하기 위해 변수로 추출)



이번엔 잘했어.잘 됐다.
실제 인코딩이 이렇게 될 것 같아서요.
collection.js
var Collection = Backbone.collection.extend({
    model: Backbone.Model.extend({ idAttribute: 'cid' });
});
var collection = new Collection(attrs);
만약 토로한 부분, 잘못된 인식이 있다면 반드시 지적해 주십시오.

좋은 웹페이지 즐겨찾기