문제

서버에서 모델이나 컬렉션을 가져올 때 문자열화한 후 다시 구문 분석하지 않는 한 모델의 속성에 액세스할 수 없습니다.아마도 모델 자체에는 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" ?

확인해야 할 몇 가지 사항.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top