2013-07-28 6 views
3

한 예로 대답 codeschool 2 도전 5 레벨 다음과 같은 솔루션이 있습니다backbone.js는 codeschool의 backbone.js 튜토리얼에서

Application.js

var appointment = new Appointment({id: 1}); 

appointment.on('change',function() { 
    alert('its changed'); 
}); 

나는이 대부분의 아마 간단한 예이지만 실현을 사례를 모델 정의에 정의하여 모든 모델 인스턴스에 적용하지 않으시겠습니까?

날의 인스턴스가 변경 될 때마다보기에서이 메서드가 실행될 때마다 모델 정의에있는 것이 있습니까? 그러면 해당보기 메서드는 경고를 발생시킬 수 있습니다.

저는 분명히 배우므로 어떤 도움도 받으실 수 있습니다!

답변

1

여기서 이벤트는 특정 모델 인스턴스에 연결됩니다. 따라서 동일한 인스턴스가 다른 인스턴스에 대해 이벤트를 트리거하지 않습니다.

var appointment = new Appointment({id: 1}); <--- Event is triggered 

var appointment1 = new Appointment({id: 2}); <--- Event is not triggered 

appointment.on('change',function() { 
    console.log('its changed'); 
}); 

이벤트는 모델 인스턴스에 직접 첨부되므로 이벤트를 트리거하지 않습니다. 그러나 모델을 정의 할 때 동일한 작업을 수행하면 모델의 모든 인스턴스에서 동일한 작업이 트리거됩니다.

var Appointment = Backbone.Model.extend({ 
    initialize: function() { 
     this.on('change', function() { 
      console.log('its changed') 
     }); 
    } 
}); 

이제 모델 인스턴스를 변경하면 이벤트가 트리거됩니다.

보기에서 동일한 내용을 말하면 인스턴스로 전달되는 모델은 일반적으로 이벤트를 계속 수신합니다. 그리고 변경이 있으면 (자), 뷰의 상태를 변경하는 메소드가 불려갑니다.

var View = Backbone.View.extend({ 

    initialize: function() { 
     // Listening to the event on the model which when 
     // triggered will render the view again 
     this.listenTo(this.model, 'change', this.render); 
    }, 
    render: function() { 

     // do something 
    } 
}); 

var view = new View(); 

view.render();