2014-04-23 5 views
0

휴대 전화 목록을 볼 수 있습니다. 목록에서 전화를 추가하거나 삭제할 수 있습니다. 예를 들어, 삭제 전화 양식을 클릭하면 함수가 호출됩니다. 문제는 전화가 삭제되면 업데이트 된 목록으로 이동하려고합니다. 내가 백본을 사용하고있는 방식은 서버에서 전화 모음을 다시 가져 오는 것을 의미하지만, 목록이 업데이트되는 한 괜찮습니다. 아래 함수를 사용하면 목록이 새로 고쳐지지 않습니다.컬렉션에서 모델을 삭제 한 후보기를 새로 고치려면 어떻게합니까?

 deletePhone: function (ev) { 

      var that = this; 
      ev.preventDefault(); 
      var phoneDetails = $(ev.currentTarget).serializeObject(); 
      var phone = new P.phone(); 
      phone.set({id: phoneDetails['phone-to-delete']}); 
      phone.destroy({ 

        success: function(model, response, options) { 
        Backbone.history.navigate('phones', {trigger: true}); 
        }, 
        error: function(model, response, options) { 
        console.log("In error: "); 
        } 


      }); 

     }, 

어떻게 업데이트 된 목록으로 이동합니까?

답변

1

컬렉션 내의 모델에서 delete를 호출하고 해당 모델이 서버에서 성공적으로 삭제되면 해당 모델은 컬렉션에 버블 링되는 'destroy'이벤트를 트리거합니다. 이보기는 콜렉션에서 destroy 이벤트를 듣고, 일단 이것이 발생하면 다시 렌더하라는 명령을 받는다. 이렇게하려면, 뷰의 초기화 함수에서 코드 줄을 넣어 :

this.listenTo(this.collection, 'destroy', this.render); 

이 코드는 한 번 컬렉션에서 모델이 삭제 된 기능을 렌더링 호출합니다. 백본이 프런트 엔드의 컬렉션에서 이미 제거 했으므로 서버에서 업데이트 된 목록을 가져올 필요가 없습니다. 물론 다른 클라이언트가 목록을 변경했을 가능성이있는 경우 서버에서 다시 가져 오는 것이 필요할 수 있습니다.

이것은 모델이 컬렉션에서 다른 방법으로 제거되는 경우 제거 함수 자체에 렌더링 호출을 배치하는 것보다 낫습니다.