2012-08-29 4 views
0

add: truefetch으로 전달할 때 변경된 모델을 얻는 방법이 있는지 궁금합니다. 컬렉션의 모든 새 모델을 렌더링하지만 변경된 모델이 있는지 알고 싶습니다.Backbone.js : fetch ({add : true}), 변경 이벤트 트리거?

이것이 가능합니까?

성공 처리기와 다른 기능을 fetch으로 전달할 가능성도 고려했습니다.이 기능은 전체보기가 아닌보기의 특정 부분 만 다시 렌더링합니다.

답변

2

일반적인 패턴은 모델을 렌더링하는 뷰를 갖는 것입니다. 당신은 :

  • 추가 된 모델의 의견을 추가하기 위해 컬렉션의 add 이벤트 컬렉션의 뷰에 가입.
  • 모델의 뷰를 모델의 change에 다시 등록하여 다시 렌더링 할 수 있습니다.

당신은 여전히 ​​하나의보기를 원한다면, 당신 : 은 - 뷰에 추가하기 위해 컬렉션의 add 이벤트에 가입. - 컬렉션의 change 이벤트를 구독하고보기의 일부를 업데이트합니다.

+0

컬렉션보기 및 모델보기로 가기로 결정했습니다. 질문은 당신이 대답 한 것이 아닙니다. 나는 변화 사건을 알고있다. 예를 들어 보겠습니다. 팀 프로젝트 관리 앱에서 작업보기를로드 한 다음 한 작업의 세부 정보를 변경합니다. 이제 이미 렌더링 된 뷰를 업데이트 된 상태로 유지하려고합니다.이 경우 작업 이름에 대해 이야기합니다. add : true를 가져오고 전달하면 새 작업 만 표시되고 변경 이벤트도 트리거되지 않습니다. 필자가 생각한 또 다른 방법은 침입의 매개 변수가있는 가져 오기의 성공 처리기에서 이벤트를 트리거하는 것입니다. true – Andrew

+0

각 모델에 대한 이벤트를 트리거하고 예제에서 jQuery 작업 이름을 사용하여 업데이트합니다. 따라서 이미 렌더링 된 뷰는 계속 업데이트됩니다. 어떻게 생각해? – Andrew

+1

가져온 후 변경된 이벤트 *가 업데이트 된 모델에 대해 트리거됩니다. 왜 또 다른 방아쇠를 당기고 싶어? 어쩌면 나는 정확하게 이해하지 못했습니다 ... – ggozad

1

"추가"이벤트에 바인딩하고 뷰의 일부만 업데이트하는 메서드를 트리거 할 수 있습니다. 보기를 다시 렌더링하려면 콜렉션 이벤트를 명시 적으로 바인드해야합니다. 즉, 뷰의 어느 부분을 렌더링해야 하는지를 제어합니다. 콜렉션 "change"이벤트를 기반으로 볼 수 있도록 렌더링하는 기능을 변경할 수 있습니까?

각 모델에는 isNew() 및 hasChanged() 메소드가 있습니다. 컬렉션을 반복하여 어떤 모델이 변경되었는지 확인할 수 있습니다. 이렇게하는 것이 쉽고 더 능숙한 방법이 있다면, 나는 모든 귀입니다.

어쩌면 우리는 당신이하고있는 것을 정확히 볼 수 있도록 몇 가지 코드를 게시 할 수 있습니까?

+0

유일한 문제는'fetch ({add : true}) '를 호출 할 때 현재 모델이 업데이트되지 않는다는 것입니다. 'fetch'를'add : true'라고 부르면 모든 뷰가 다시 렌더링되고 나는 그것을 원하지 않습니다. – Andrew

+0

'fetch'를 호출하면'reset' 이벤트가 발생하고'change' 이벤트를 기반으로 함수를 변경할 수 없습니다. – Andrew

+0

컬렉션의 데이터 예제와 함께 코드를 게시 할 수 있습니다. 섬기는 사람. – TYRONEMICHAEL

2

버전 0.9.10부터 {add:true} 대신 {update:true}을 사용해야합니다. 그러면 변경된 모델 각각에 대해 change 이벤트가 트리거되도록 콜렉션에 지시합니다. 제거하면 컬렉션이 업데이트 모델을 추가하고 싶은 경우

합니다 (change 이벤트가 에 수집하지 않는 모델을 트리거합니다),하지만, 당신과 같이이 작업을 수행 할 수 있습니다

myCollection.fetch({update:true, remove:false}); 

Here's the relevant section in the Backbone.js documentation.

관련 문제