2011-11-25 2 views
22

단일 속성 "attribute_1"에 대한 변경을 바인딩하는 다음 코드가 있습니다.Backbone.js 모델에 여러 속성 변경을 바인딩하는 올바른 방법

var Mine = Backbone.Model.extend({ 
    initialize: function() { 
    this.bind("change:attribute_1", function() { 
     console.log('changed!'); 
    }); 
    } 
}); 

두 속성을 어떻게 바인딩합니까? 그것을

var Mine = Backbone.Model.extend({ 
    initialize: function() { 
    this.bind("change:attribute_1 change:attribute_2", function() { 
     console.log('changed!'); 
    }); 
    } 
}); 

답변

24

나는 그런 "대량 바인드"기능이있는 경우 (당신이 그것을위한 기능 요청을 열 수 모른다 :

var Mine = Backbone.Model.extend({ 
    initialize: function() { 
    this.bind("change:attribute_1, change:attribute_2", function() { 
     console.log('changed!'); 
    }); 
    } 
}); 

을 아니다이 수행이 작동하지 않습니다 유용하게 보인다).

var Mine = Backbone.Model.extend({ 
    initialize: function() { 
    var listener = function() { console.log('changed'); }; 
    this.bind("change:attribute_1", listener); 
    this.bind("change:attribute_2", listener); 
    } 
}); 

또는 당신은 모든 변경 사항을 청취 (다음 리스너에서 필터링) 할 수 있습니다 :

당신은 개별적으로 바인딩 할 수 있습니다

var Mine = Backbone.Model.extend({ 
    initialize: function() { 
    var listener = function() { console.log('changed'); }; 
    this.bind("change", listener); 
    } 
}); 
+12

'B (renamed to on()을 됨) bind() 함수 이벤트 목록은 공백을 지원 ind()는 chainable이다 : this.bind (...). bind (...)'. –

+1

공통 리스너를 사용하는 경우 어떤 속성이 변경되었는지 어떻게 확인합니까? –

79

을 Backbone.js 0.9.0로, 또한

model.on("change:title change:author", ...) 

// equivalent to 

model.bind("change:title change:author", ...) 
+2

변경 당 1 회 또는 여러 번이 콜백을 호출합니까? – Sukima

+4

@Sukima 변경된 속성에 대해 한 번 호출합니다. 제목이 변경되면 한 번 발생합니다. 작성자가 변경되면 한 번 실행됩니다. 제목과 저자가 모두 변경되면 처음에는 한 번, 저자는 한 번. –

+2

이 맵은 listenTo 구문과 어떻게 매핑됩니까? – backdesk