2014-05-13 4 views
0

사용자가 "온라인"인 경우 표시되는 클래스를 구현하려고합니다.계산 된 속성이있는 반응 형 유성 템플릿

Template.user.isOnline = function() { 
    timeSinceOnline = (new Date()).getTime() - this.lastSeenAt.getTime() 
    if (timeSinceOnline > 2000) { 
     return ''; 
    } else { 
     return 'is-online'; 
    } 
}; 

속성에서 볼 마지막은 지속적으로 사용자가 열려있는 응용 프로그램이있는 경우 업데이트되는 : 나는 사용자에 lastSeenAt 날짜 속성을 사용하여이 템플릿 도우미가 있습니다. 이 헬퍼는 lastSeenAt 속성이 변경 될 때만 템플릿을 업데이트합니다. 따라서 사용자가 온라인 상태 일 때 작동하지만 오프라인 상태 일 때 작동합니다. 어쨌든 다시 계산해야합니까? 아니면 수동으로 일종의 "오프라인"속성을 설정해야 작동합니까?

답변

1

반응 형 Date 데이터 소스가 필요한 것 같습니다. 현재 날짜와 시간을보고하고 매초마다 다시 계산하여 재 계산을 유발하는 반응 변수입니다.

Session.set("currentDate", new Date); 
setInterval(function() { Session.set("currentDate", new Date); }, 1000); 

나중에 코드에서 사용 :이 작업을 수행하는 방법의

하나는 세션 변수에하는 것입니다 너무 비효율적 될 경우

Template.user.isOnline = function() { 
    timeSinceOnline = Session.get("currentDate").getTime() - this.lastSeenAt.getTime() 
    if (timeSinceOnline > 2000) { 
     return ''; 
    } else { 
     return 'is-online'; 
    } 
}; 

당신이 올 수 있습니다 비슷한나중에 비슷한.

0

timesync 패키지를 살펴볼 수 있습니다. 서버 시간과 동기화되는 현재 시간에 대한 반응적인 데이터 소스를 제공합니다. lastSeenAt 속성이 서버 또는 다른 사용자에 의해 설정된 경우 모든 클라이언트가 정확한 시계를 가지고 있다고 가정 할 수 없기 때문에 서버 시간과의 동기화가 필요합니다.

사용자의 온라인 상태 추적을 위해 user-status 패키지를 볼 수도 있습니다.