2012-12-01 6 views
2

내 앱에서 사용자는 일련의 모델로 컬렉션을 만듭니다. 서버에 많은 요청을하고 싶지 않기 때문에이 모델을 서버에 일괄 적으로 저장하는 사용자 지정 함수를 만들었습니다. 그런 다음 서버는 ID를 포함한 모든 모델로 응답하고이 모델을 다양한 모델로 설정합니다. 지금까지 모두 잘 작동합니다.백본 모델 동기화 상태

현재 문제는 Backbone이 모든 모델이 서버와 동기화된다는 것을 모르는 것입니다. 따라서 나중에 각 모델에서 model.save()를 호출하면 각 모델이 서버로 다시 전송됩니다 (일괄 작업 이후로 변경된 모델 만 해당). 백본에게 모든 모델이 동기화되었음을 알리는 방법은 무엇입니까? 나는 'changed'와 'hasChanged'속성을보고 있었지만,이 속성들을 조작해야만하는지 잘 모르겠습니다.

답변

7

백본에는 마지막으로 변경된 속성 추적 기능이 포함되어 있지 않습니다. 서버와 동기화하십시오.

changedhasChanged은 서버와의 마지막 동기화 이후 변경된 속성을 처리하지 않습니다.

당신은 당신의 모델의 상태를 추적하기 위해 자신의 메커니즘을 만들어야합니다 : 각 모델은 hasChangedSinceLastSync 플래그를해야

  1. .
  2. 각 모델은 자신의 change 이벤트를 바인딩 (.on)해야하며 플래그를 true로 설정해야합니다.
  3. sync 메서드를 재정의하고 데이터가 서버에서 반환되면 (읽기/만들기/업데이트) 플래그를 false로 설정합니다.
+0

3 단계를 구현하는 방법에 대한 예제를 제공해 주시겠습니까? – Fdr

+1

다음은이 아이디어를 구현 한 완벽한 모델입니다. https://gist.github.com/berzniz/8010245 –

+1

그 요지에 버그가 있습니다. sync()가 반환해야하는 버그는 다음과 같습니다. "return Backbone.sync (method, model, options); " 대신 "Backbone.sync (방법, 모델, 옵션);" – Fdr

0

모델의 id 속성이 설정되지 않았거나 null 인 경우 백본에서 HTTP POST으로 모델 서버 측 모델을 만듭니다.

그래서 서버가 반환 할 때 수동으로 id 속성을 설정해야합니다.

또한 id 속성이 id이 아닌 경우 다른 속성임을 백본에게 알릴 수 있습니다.

Cf를, 워드 프로세서는 :