2013-01-08 2 views
2

Backbone.js에서 작업하면서 모델의 메서드 내에서 모델 속성을 설정하고 싶습니다. 이것은 단순해야만하는 것처럼 보이지만 작동시키지 못합니다.Backbone.js : 모델 내에서 모델 속성을 설정 하시겠습니까?

현재 내가 갖고있는 것은 이것입니다. 나는 'performSearch'에 통화 중 '결과'속성을 설정하기 위해 노력하고있어 :

Uncaught TypeError: Object #<Object> has no method 'set' 

내가 잘못 뭐하는 거지 :

var SearchModel = Backbone.Model.extend({ 
    performSearch: function(str) { 
     $.get('/' + str, function(results) { 
     console.log(data); 
     this.set("results", data); 
     }); 
    }, 
}); 

이 나에게 다음과 같은 오류를 준다?

답변

5

this은 ajax 콜백의 모델 객체에 바인딩되지 않습니다.

당신은 수행하여 문제를 해결할 수 있습니다

var SearchModel = Backbone.Model.extend({ 
    performSearch: function(str) { 
     //assign to local variable, so that it is accesible in callback's closure 
     var self = this; 
     $.get('/' + str, function(results) { 
      // are you sure it should be data? 
      console.log(data); 
      self.set("results", data); 
     }); 
    }, 
}); 

다른 방법을이 모델에 명시 적으로 바인드 콜백 함수에있다 할 :

var SearchModel = Backbone.Model.extend({ 
    performSearch: function(str) { 
     //assign to local variable, so that it is accesible in callback's closure 
     $.get('/' + str, (function(results) { 
      // are you sure it should be data? 
      console.log(data); 
      this.set("results", data); 
     }).bind(this)); //binding here 
    }, 
}); 
+0

그것을하다고, 감사합니다! (곧 받아 들일 것입니다) – Richard

+0

두 번째 예제에서 'this'를 바인딩하는 경우 'self'부분 전체를 생략 할 수 있습니까? – robmisio

+0

@robmisio 예, 미안 - 카피 - 파스타 오류;) – soulcheck