2017-01-12 4 views
1

유성 앱이 있고 아래와 같은 철분 라우터 구성에서 모든 게시 기능을 한꺼번에 호출합니다. 난 단지 사용자가 로그인 후 구독을 반환하려면, 그래서) (Meteor.userId을 확인하십시오Meteor : 게시 기능이 사용자 로그인 후 페이지 새로 고침을 필요로합니다.

Router.configure({ 
    layoutTemplate: 'layout', 
    loadingTemplate: 'loading', 
    notFoundTemplate: '404', 
    waitOn: function() { 
    if (Meteor.userId()) { 
     return [Meteor.subscribe('users'), 
      Meteor.subscribe('company'), 
      Meteor.subscribe('projects'), 
      Meteor.subscribe('columns'), 
      Meteor.subscribe('cards'), 
      Meteor.subscribe('contents'), 
      Meteor.subscribe('labels'), 
      Meteor.subscribe('notifications')]; 
    } 
    } 
}); 

기능은 다음과 같이 user.companyId에 따라 모두 동일한 구조를 가지고 게시 :

Meteor.publish('cards', function() { 
    if (this.userId) { 
    const user = Meteor.users.findOne({ _id: this.userId, companyId: { $exists: true } }); 

    if (user) { 
     return Cards.find({ companyId: user.companyId }); 
    } 
    } else { 
    this.ready(); 
    } 
}); 

내 문제는 사용자가 등록 할 때 계정이 생성되고 회사 ID가 사용자에게 저장되지만 로그인 할 때 데이터를 표시하는 유일한 방법은 브라우저를 새로 고치는 것입니다. 나는 그것이 반응 적으로되기를 바란다. meteor guide에서

+0

당신이 이것을 달성하기 위해 게시 복합 사용할 수 있습니다. – MasterAM

답변

1

: 클라이언트에

, 반응성 기능 변경에 아무것도 전체 기능을 다시 실행되며, 결과는 매우 직관적합니다.

그러나 서버에서는 게시 기능에서 반환하는 커서의 동작이 의 동작으로 제한됩니다. 검색어와 일치하는 데이터에 개의 변경 사항이 표시되지만 쿼리 은 절대로을 변경하지 않습니다.

제안 당신은 참으로 reywood:publish-composite를 사용할 수 있지만 간단한 경우에 나는 reactive-publish을 설치하고 실행하는 것이 훨씬 쉬울 것 같아요.

패키지를 설치, 단지 this.autorun에서 발행물을 포장 :

Meteor.publish('cards', function() { 
    this.autorun(function() { 
    if (this.userId) { 
     const user = Meteor.users.findOne({ _id: this.userId, companyId: { $exists: true } }); 

     if (user) { 
      return Cards.find({ companyId: user.companyId }); 
     } 
    } else { 
     this.ready(); 
    } 
    }); 
}); 
+0

또 else 문에서'return'을하고 싶다고 생각합니다. – rubie