2012-03-27 2 views
5

backbone.js에서 Model에있는 changeall 이벤트는 기존 속성에 대한 모델의 속성이 set 인 경우 실행되지 않습니다. 예를 들어backbone.js : 속성을 기존 값으로 설정할 때 발생하는 모델 이벤트?

, 나는 다음과 같은 이벤트가 설정 한 경우 :

ActiveUser.bind('change', this.displayActiveUser, this); 
ActiveUser.bind('all', this.displayActiveUserAll, this); 

을 그리고 나서 수동으로 빈 문자열로 ActiveUser의 값을 설정 :

ActiveUser.set({ text : '' }); 

이벤트 화재 경우에만 ActiveUser.text이 아직 빈 문자열으로 설정되지 않은 경우

이것은 적절한 행동입니다. 그러나 설정중인 값이 기존 값이더라도 사용할 수있는 이벤트가 있습니까?

업데이트 : 공식 Backbone.js에 아무것도 표시되지 않습니다. list of events. 흠.

+2

언제든지 수동으로 'ActiveUser.trigger ('change ')'를 실행할 수 있습니다. – abraham

+0

감사합니다. 그게 내가해야 할 일입니다! – Richard

+0

답변으로 내 의견을 추가했습니다. – abraham

답변

8

당신은 항상 ActiveUser.trigger('change'); 수동으로 변경 이벤트를 트리거 할 수 있습니다.

1

이 동작을 원하는 모든 Model 클래스의 상위 클래스 인 Backbone.Model 하위 클래스가 필요합니다. 이 행을 따라 set 메소드를 무시하십시오. 변경 사항에 대해서만 이벤트를 발생시키는 논리는 새로운 옵션 추가를 쉽게 지원하지 않는 방식으로 Backbone.Model.set으로 코딩됩니다.

(... 발췌 ...)

set: function(key, value, options) { 
    //Handle both "key", value and {key: value} -style arguments. 
    if (_.isObject(key) || key == null) { 
     options = value; 
    } 
    this.change(options); //This fires the event 
    Backbone.Model.prototype.set.apply(this, arguments);//Trigger normal behavior as well 
3

트리거 변경 이벤트 아브라함이

MyModel.trigger('change') 

그래서 그것의 가능한 수동으로 변경 이벤트를 트리거 할 수 있지만 어떤 경우에는 잘 작동하지 것이라고 말했다 수동으로. 렌더링 메소드가 모델에서 속성을 가져 와서 처음에 모델이 비어있는 경우를 생각해보십시오. 코드가 모델에 무언가를 설정하고 그 라인 바로 직후에 MyView.render() 또는 MyModel.trigger('change')이라고 말하면 렌더 메소드가 더 빨라 졌을 지 모릅니다 새로 설정된 속성.

빠른 해키 대안은, 당신이 뭔가를 설정 한 각 시간이 함께 임의의 숫자를 생성하고 모델에 전달할 수 :

MyModel.set({myProperty:something,rand:Math.random()}); 

또는

MyModel.set({myProperty:something,t:(new Date).getTime()}); 

그래서이 경우에는이 모델이 될 것이라 확신합니다 변화가 일어나기 때문에 항상 변경 이벤트를 실행합니다.하지만 해킹이되고 많은 일이 발생하면 앱이 난수 계산기가됩니다.

피터 라이언스 방법으로 이동하십시오.

+0

해키 한 대안은 확실하게 작동하지만, 앞으로 나아갈 수있는 방아쇠가 훨씬 분명합니다. –

관련 문제