2011-09-14 5 views

답변

5

예 및 예. 모델에 .toJSON()를 호출

그것의 속성을 복제, 이것은 다른 모델로 전달 될 수 있습니다

var m1 = new MyModel({foo: "bar", baz: "widget"}); 
var attrs = m1.toJSON(); 
var m2 = new MyModel(attrs); 

console.log(m2.get("foo")); //=> "bar" 
console.log(m2.get("baz")); //=> "widget" 
+0

왜 'var m2 = new MyModel (m1.attributes);'대신에 toJSON을 실행해야합니까? – fancy

+2

이렇게하면 m1.attributes라는 참조가 m2로 전달됩니다. 이것은 m2.set ({foo : "change"})'를 호출 할 때, m1은 또한 변경 될 것임을 의미합니다 :'m1.get ("foo") // => "change"'. '.toJSON()'을 호출하면 속성의 사본을 만들어 모델이 서로 독립적이되도록 할 수 있습니다. –

+0

감사합니다. – fancy

1

대답은 전체 범위에 상태를 유지할지 여부에 따라 달라집니다. 백엔드를 통해 완전한 상태를 유지하기를 원하지 않을 수도 있습니다. 이러한 경우, 해시 및 기타 멤버에서 유지하려는 데이터 멤버를 모델 인스턴스의 직접 데이터 멤버로 가질 수 있으며, 기본 지속성 모델을 백본은 그것이하는 것처럼 작동합니다. 그러나 모델 인스턴스 속성뿐만 아니라 속성을 사용하여 정의 된 상태를 갖는 것에 대한 플립 사이드 (flipside)가 있습니다. 인스턴스의 데이터 멤버는 속성 해시의 멤버가 어디에 있는지 관찰 할 수 없습니다. 관찰자를 바인딩하여 이러한 속성을 변경할 수 있습니다. 기본적으로 Backbone에서 제공하는 getter 및 setter가 사용됩니다. 간단히 말해 전체 국가가 관찰 가능한 상태로 머물러 있지 않습니다. 상태 변경으로 모델 인스턴스의 데이터 멤버에서 변경 내용을 프로그래밍 방식으로 감지 할 수 없습니다. 특히 통화 동기화에 대한 상태 변경을 감지하는 경우이 작업을 수행하지 않아도됩니다. 문제를 해결하기 위해 문제가 발생하면 특성 해시에서 모델 상태를 정의하는 모든 매개 변수를 사용할 수 있으므로 상태 변경을 안정적으로 감지 한 다음 toJSON 함수를 재정 의하여 해당 특성의 해시를 반환 할 수 있습니다 당신은 계속해야합니다. 이 접근 방식의 대충은 모델 상태의 변경을 감지하는 많은 경우에 유지하려는 상태를 변경하지 않았을 가능성이 매우 높다는 것입니다. 귀하의 요구 사항에 따라 선택하십시오.

관련 문제