이 함수 (*)와 (**)는 Backbone.View
안에 있지만이 문제를 해결하는 데 Backbone에 대한 지식이 필요하지 않다고 생각합니다. 때 코드에서 내 의견에서 볼 수 있듯이이 코드 조각을 다시 작성하는 방법
:
1) 나는 getAvatar
기능 모든 것이 괜찮 전화 2
)이 getAvatar는 setAvatar
뭔가 내가 해결 방법을
(*)
getAvatar: function()
{
var creatorIds = this.getCreatorIds();
console.log(creatorIds); // [1,2] ****** here is ok *******
for (var c = 0, l = creatorIds.length; c < l; c += 1) {
if (typeof this.avatars[creatorIds[c]] === 'undefined') {
this.userModel = new UserModel({id: creatorIds[c]});
this.userModel.fetch();
this.userModel.on('change', this.setAvatar, this);
}
}
},
(**)
setAvatar: function()
{
console.log(this.userModel.get('id')); // 2, 2 ********* it should be 1, 2 *******
this.names[this.userModel.get('id')] = this.userModel.get('name');
this.avatars[this.userModel.get('id')] = typeof this.userModel.get('avatar');
this.render();
},
(*)
,initialize: function()
{
_.bindAll(this, 'getAvatar', 'setAvatar');
}
, 당신도 함수의 범위를 바인딩? '_.bindAll (this)'또는 비슷한 것? – rjz
루프의 this.userModel 값을 겹쳐 쓰고 있습니다. 'context'를'.on'의 셋째 매개 변수로 제공하고 setAvatar에서'this'를 정확히'UserModel' 인스턴스로 설정할 수 있습니다. –
@Darhazer 당신이 제안한 것을 시도했지만 똑같은 결과를 얻었습니다. this.userModel에 관한 것입니다. 어떻게 생각해? – js999