2012-09-30 2 views
0

서버에서 모델 또는 콜렉션을 가져 오면 문자열 화 한 다음 다시 구문 분석하지 않으면 모델의 특성에 액세스 할 수 없습니다. 아마 모델 자체가 backbone.js에서 약간의 추가 오버 헤드를 가지고 있을까요? 아래 코드에서 stringify/parse를 순차적으로 수행 할 수 있습니다.이 구문 분석은 내가 시작한 것과 동일한 결과를 제공하기로되어 있습니다. 그러나 내 모델의 속성이 이전과 다르게 노출 되었기 때문에이 두 단계를 수행하여 불필요한 정보를 완전히 제거했습니다. 확실히 내 모델 속성에 액세스하려면이 두 단계를 수행 할 필요가 없습니다. 맞습니까?backbone.js 모델 및 콜렉션 오버 헤드

Eg. 
thismodel = /// assume this came from server fetch 
alert(thismodel.name); // DOES NOT WORK - undefined 

jsonmodel = JSON.stringify(thismodel); 
var providerprefslistJSON = jQuery.parseJSON(jsonmodel); 
alert(providerprefslistJSON.name);  // WORKS 

답변

1

백본 모델 개체는 일반적인 오래된 JavaScript 개체가 아닙니다. 그들은 그들의 속성을 an internal hash에 유지합니다.

alert(thismodel.attributes.name);

또는 더 나은 아직은 the get() method를 사용합니다 :

alert(thismodel.get("name"));

작동하는 이유를 당신이 다시 다음 JSON으로 모델을 변환 할 때 name가이 작업을 수행 할 수 있습니다 속성에 액세스하려면 는 JSON.stringifythe toJSON() method이므로 에서 JSON 문자열을 생성합니다. 내부 속성 해시는입니다.이 문자열을 구문 분석하면 평범한 Java 스크립트 개체 - 백본 모델 개체와 다릅니다.

0

먼저 모델 또는 응답의 속성에 액세스하려고합니까?

alert(thismodel.name)에서 모델이 아니라 속성의 속성을 사용하는 것으로 보입니다. 모델 속성을 찾고 있다면 아마도 원하는 것일 것입니다. alert(this.model.get('name'))

실제로 model.name을 찾으려면 기본적으로 데이터를 파싱하는 방법에 문제가있을 수 있습니다. 예를 들어 서버의 JSON이 {{name ':'Jimmy '}와 (과) 같습니다.

model.response 보내진 원시 JSON은 object.name 아래에 "Jimmy"네임 스페이스가 있지만, Backbone은 달리 지시하지 않는 한 자동으로이를 가져 와서 모델 속성으로 변환합니다 (예 : modelObj.attributes.name). get() 기능을 사용하십시오.

모든 것이 제대로 작동하는 경우 모델 데이터에 액세스 할 수 있어야합니다.

예. 가져 오기

var model = new MyModel(); 
    model.id = 1; 
    model.fetch({ 
     success: function(model, response) { 
      console.log(model.get('name')); // The model name attribute 
      console.log(response.name); // The RAW response name property 
     } 
    }); 

또는 서버가 JSON 데이터로 데이터를 보내지 않고 있습니다. 서버 응답이 content-type="application/json"입니까?

몇 가지 사항을 확인하십시오.