Parse의 Model과 Backbone의 Model에서 id를 다루는 방법의 차이


(이종은(Jong Lee)) #1

차이점을 정리할 필요가 있어보여 적어봅니다. 일단 파악한 부분까지 적고 업데이트 해나갈게요.

Parse모델에는 change 이벤트가 없다보니 Parse모델을 받아서 attributes를 통해 BB모델에 전달한다거나 다시 BB모델을 Parse모델로 전환하는 일들을 하게 되는데 이때 id를 다룰 때 주의가 필요합니다.

ParseModel에서 Id가 나오는 경우에만 오른쪽에 //OK 주석을 달았습니다.

    console.log(clickedParseModel.attributes.id); 
    console.log(clickedParseModel.attributes.objectId);
    console.log(clickedParseModel.id); //OK
    console.log(clickedParseModel.get('id'));
    console.log(clickedParseModel.get('objectId'));
    console.log(clickedParseModel.toJSON().id);
    console.log(clickedParseModel.toJSON().objectId); //OK

원인 및 깔끔한 대응 방법을 찾아보고 알게되면 공유할게요.
비슷한 고민을 해보신 분은 어떻게 하고 계신지 알려주세요.^^


(InGrowth) #2

BackBone모델에 전달하기 위해서 plain한 object로 변화시켜서 쓰고 있습니다.

function toObject(_callData) {
  if (_.isArray(_callData)) {
    return _.map(_callData, function(_data) {
      return _toObject(_data);
    });
  } else {
    return _toObject(_callData);
  }

  function _toObject(pointerData) {
    if(pointerData){
      var info = _.clone(pointerData.attributes || pointerData || {});
      // pointer를 위한 id
      // cloudCode로 오는 것을 위한 className.
      info["objectId"] = info["id"] = pointerData.id || pointerData.objectId;
      info["className"] = info["className"] || pointerData.className;
      return info;
    }else{
      return {};
    }
  }
};

var Meal = Backbone.Model.extend({ idAttribute: "objectId" });
var meal = new Meal(toObject(ParseModelObject);