2015-01-24 4 views
0

Backbone.js와 함께 Todo 앱을 작성하고 있습니다.Backbone.js. 변경 이벤트를 올바르게 작성하십시오.

아래 코드 중 일부를 볼 수 있습니다. 모델 :

var Todo = Backbone.Model.extend({ 
    defaults : { 
     title: 'Task Title', 
     complete: false 
    }, 
    initialize: function(){ 
     this.on("change:complete", function() { 
      alert("foo"); 
     }); 
    } 
}); 

보기 :

var AppView = Backbone.View.extend({ 
     collection: todoCollection, 
     el: 'body', 
     events: { 
      'click #tasks li .complete-task' : 'toggleComplete' 
     } 
     toggleComplete: function (e) { 
      var modelCid = $(e.target).parent('li').attr('id'); 

      if (this.collection.get(modelCid)['complete']){ 
       this.collection.get(modelCid)['complete'] = false; 
      } else { 
       this.collection.get(modelCid)['complete'] = true; 
      }; 
     } 
    }); 

그러나 뭔가 잘못 작동 및 작동하지 않는 모델에서 이벤트를 변경합니다. 나는 실수가 어디인지 이해할 수 없다. 도와주세요. 10q. 백본 Documentation으로 당

+0

을 나는 그것이'this.on (해야한다고 생각 '수동으로 발사하지 않는 change''하지'변화 :. complete' – Scriptable

+0

'this.on (' change'' 역시 작동하지 않습니다 –

+0

아, 제발 해고 될 변경 이벤트가 모델에서'set' 메소드를 사용해야한다고 생각합니다. – Scriptable

답변

2

:model.set(attributes, [options])

모델의 특성의 해시 (하나 많은)을 설정

설정합니다. 속성 중 하나라도 모델 상태를 변경하면 "변경"이벤트가 모델에서 트리거됩니다. 에 대한 변경 이벤트도 트리거되며 변경 : 제목, 변경 : 내용과 같이 인 이벤트에 바인딩 할 수 있습니다. 키와 값을 개별적으로 전달할 수도 있습니다.

따라서 이러한 이벤트가 발생하려면 모델에 set 메서드를 사용해야합니다. 그래서이 같은 것을 사용해야합니다 :

this.collection.get(modelCid).set('complete',false); 
관련 문제