2011-08-17 5 views
0

현재 점수를 추적하는 ScoreView가 있습니다. 그러나 모델 속성이 변경 될 때 다시 렌더링하는 데 문제가 있습니다.보기가 다시 렌더링되지 않고 확실하지 않은 이유

var ScoreView = Backbone.View.extend({ 

    initialize: function() { 
     _.bindAll(this, 'render'); 

     this.model.bind("change", function() { 
     if (this.hasChanged("score")) { 
      alert("score has changed"); 
      this.render; 
     } 
     }); 
    }, 

    render: function() { 
     alert("drawing new score"); 
     return this.model.get("score"); 
    }, 

    }); 

이 점수 변경,보기가 다시 렌더링하지 않는 경우 : 여기 뷰의 모습이다. 점수가 변하면 "점수가 변경되었습니다"라는 경고를받습니다. "this.render"의 내용을 출력 할 때 콘솔에 함수가 정의되지 않았다고 표시됩니다. 코드는이 컨텍스트의 "this"가 모델이라고 생각하지만 컨텍스트를보기로하고 싶습니다. 어떻게 해결할 수 있을까요?

답변

0
this.model.bind("change", function(model) { 
    if (model.hasChanged("score")) { 
     alert("score has changed"); 
     this.render(); 
    } 
}, this); 
+0

입니다'사용하여 "이"는 if 문에 여전히 외부 함수의 this.model을 의미합니다. 따라서 this.render()는 여전히 정의되지 않은 것으로 간주됩니다. – egidra

+0

백본에서 0.5.x'.bind()'는 문맥을 세번째 인자로 받아 들인다. 그래서 this는 '012'를 참조하게된다. –

+0

0.3.x 버전을 사용한다면 다음과 같이 할 수있다. 'this.model.bind ("change", _ .bind (function (model) {...}, this))' –

0

나는이 문제가 귀하의 바인드 내부의 익명 함수에서 'this'를 사용하고 있다고 생각합니다. 당신은 어쩌면이 시도해야합니다

var self = this; 
    this.model.bind("change", function() { 
    if (this.hasChanged("score")) { 
     alert("score has changed"); 
     self.render; 
    } 
    }); 
+0

self' 나쁜 예 –

관련 문제