backbone.js 모델 및 컬렉션 오버헤드
-
11-12-2019 - |
문제
서버에서 모델이나 컬렉션을 가져올 때 문자열화한 후 다시 구문 분석하지 않는 한 모델의 속성에 액세스할 수 없습니다.아마도 모델 자체에는 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
해결책
백본 모델 객체는 일반 오래된 JavaScript 객체가 아닙니다. "Nofollow"> Internal Hash 의 속성을 유지합니다.name
속성에 액세스하려면 다음 중 하나를 수행 할 수 있습니다.
alert(thismodel.attributes.name);
또는 더 나은 아직 get () 메소드 :
alert(thismodel.get("name"));
모델을 JSON으로 변환 한 다음 다시 시작한 다음 tojson ()메소드 는 에서 JSON 문자열을 만듭니다. ()은 기본적으로 오래된 JavaScript 오브젝트를 가져 오지 않는 문자열을 구문 분석 할 때 - 백본 모델 객체와 동일하지 않습니다.
다른 팁
먼저, 모델이나 응답의 속성에 액세스하려고 하시나요?
에서 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"
?
확인해야 할 몇 가지 사항.