1

제 질문은 컬렉션에서 모델을 어떻게 업데이트하겠습니까? 여기 내가하는 일이있다. 페이지로드시 연락처 목록을 가져옵니다. 하나의 견해에서 나는 이들 연락처를 순서가없는 목록으로 나열합니다. 각 연락처를 클릭하면 편집 양식으로 이동합니다. 연락처를 변경하면 연락처를 저장할 수 있습니다. 이렇게하면 변경된 모델을 컬렉션에 다시 저장하는 방법으로 이동합니다. 어떻게 할거 니? 백본 문서에는 업데이트 방법이 없습니다 (또는 적어도 볼 수는 없습니다). 이 작업을 수행하는 방법을 만들었지 만 기본 백본 방식인지 확실하지 않습니다. 여기있다 :컬렉션에서 모델 업데이트

 updatePlan : function() 
     { 
      //unique ID of the model 
      var id = $('input[ name=id ]').val(); 
      //remove the old model from the collection 
      this.collection.remove(this.model); 
      //add the updated model to the collection 
      this.collection.add(this.model);    

     } 
당신은이 같은 함수가있을 것이라고 생각

: 도움을

 updatePlan : function() 
     { 
      this.collection.update(this.model); 

     } 

감사

답변

0

당신은 사용자가 연락처를 편집 할 수 있습니다보기를 할 수 있습니다 모델을 업데이트하십시오. 그리고 모델은 참조로 전달되기 때문에 모델의 일부인 컬렉션에서도 업데이트됩니다.

다음은 예입니다.

EditView = Backbone.View.extend({ 
    events: { 
    'change #name': 'nameChanged', 
    'change #age': 'ageChanged' 
    }, 
    render: function() { 
    //render code 
    }, 
    nameChanged: function() { 
    var nameValue = this.$('#name').val(); 
    this.model.set({ Name : nameValue }); 
    }, 
    ageChanged: function() { 
    var ageValue = this.$('#age').val(); 
    this.model.set({ Age : ageValue }); 
    } 
} 

그리고 당신이 편집보기를 만들 때, 당신은

selectedContact = contactCollection.at(0); 
var editView = new EditView({ model: contact }); 
$('#editDiv').html(editView.render().el); 

유일한 것은 할 왼쪽 컬렉션에서 선택한 모델에 통과 한 다음 서버에 모델을 저장할 때 사용자가 클릭 저장 버튼.

$('#saveButton').click(function() { 
    selectedContact.save(); 
}); 
0

나는 Paul에 동의합니다. 컬렉션에 대한보기와 모델에 대한보기가 있어야합니다. 모델보기를 사용하면 모델을 편집 할 수 있으며 저장 내용이 올바르게 전파되어야합니다.

그러나 당신은 단일 모델을 표시하는보기를 가질 수 있도록 1 모델과 1 컬렉션 (제거 및 추가 this.model을 기반으로 함)이있는보기가있는 것처럼 보입니다 ... 나는 가정합니다. D

그런 다음이 작업을 수행 할 수 있습니다.

updatePlan : function() 
    { 
     //unique ID of the model 
     var id = $('input[ name=id ]').val(); 
     this.model.set({id: id}); 
     this.model.save(); 
    } 

나는 문제가 다음 당신의 초기 "논리", 당신은 콜렉션에서 모델을 편집하지 않는 것 같아요. 모델을 편집하면 해당 모델이 컬렉션에만 속합니다. 그래서 이벤트 모델과 ID의 사용자 설정에 같은 model.collection, 모두 실행됩니다, 변경 : 아이디 이벤트가 발생하고 그 컬렉션 중 하나를 모델에 바인딩을 트리거

희망이 도움이 :)