2014-06-05 2 views
0

작은 게임을 만들고 하나의 플레이어가 작업을 기다리고있을 때 상대방의 이름을 표시하고 싶습니다. 상대방 이름을 표시하기 위해 다음과 같은 기능이 있습니다. 내 템플릿에서템플릿 도우미에서 함수의 재실행을 강제 실행하는 방법

Template.Details.helpers({ 
    opponentName: function() { 
     var opponentId = _.without(this.players, Meteor.userId)[0]; 
     var oppDoc = Meteor.users.findOne({_id: opponentId}); 
     return oppDoc; 
}) 

<template name='opponent'> 
<h3> {{opponentName.username}} </h3> 
</template> 

이 처음으로 올바른 사용자 이름을 반환합니다. 그러나 그 후에는 사용자 이름이 변경되지 않습니다. 나는 이것이 내 var 상대이기 때문에라고 생각한다. Id는 변하지 않을 것이다.

나는이 반응을 일으키는 방법을 생각하고 있었다. 따라서 reactieve 데이터 소스 (Meteor.userId)가 opponentId로 함수를 변경하면 다시 실행되어 새로운 userId를 반환합니다.

이 작업을 수행하는 올바른 방법은 무엇이며 템플릿 도우미에서 여전히 수행합니까?

편집 :

Template.Details.helpers({ 
     opponentName: function() { 
      var id = Games.findOne({_id: this._id}, {isCreating: 1}) 
      var opponentId = _.without(this.players, id)[0]; 
      var oppDoc = Meteor.users.findOne({_id: opponentId}); 
      return oppDoc; 
    }) 

내 생각은 isCreating이 ID를 업데이트하기 때문에하는 것은 반응성,이었다, 따라서 모든 업데이트됩니다 :

은 또한 다음과 같은 시도했다. 하지만이 방법도 효과가 없습니다.

답변

1

Meteor.userId()은 반응 종속성을 올바르게 등록하기 위해 함수로 호출해야합니다. 그래서 마지막에 그 괄호를 추가하면 모든 것이 설정되어야합니다.

다른 문제는 this.players 값입니다. 상대방이 변화 할 때 반응 적으로 업데이트되고 있습니까?

+0

고마워요 :) 다시 한 번 그 해결책이 너무 간단하다는 것에 놀랐습니다. Meteor.userId()는 내가 필요한 전부였습니다. – swennemen

관련 문제