2014-11-24 6 views
1
내가 누군가 프로젝트에서 일하고 있어요

에서 이미 개발 무엇이며이 코드는 this.data() 유성 또는 철 라우터

onBeforeAction: function() { 
      if(this.data()) { 
       this.subscribe('edition', this.params.editionId).wait(); 
      } 
     }, 
     data: function() { 
       var editionId=this.params.editionId; 
       var edition = Editions.findOne({"permalink":editionId}) 
       if(!edition) 
        edition = Editions.findOne({_id: editionId}) 
       return { 
        edition: edition 
       }; 
     } 

여기 this.data() 기능이 무엇을보고? 유성에서는 들어 본 적이 없어요. 이 작업을 수행하는 올바른 방법입니까?

내가 그것을 변경 다음과 몇 가지 문제에 직면하고 :)

onBeforeAction: function() { 

       this.subscribe('edition', this.params.editionId).wait(); 
     }, 
     data: function() { 
      if(this.ready()){ 
       var editionId=this.params.editionId; 
       var edition = Editions.findOne({"permalink":editionId}) 
       if(!edition) 
        edition = Editions.findOne({_id: editionId}) 
       return { 
        edition: edition 
       }; 
      } 
     } 

더 나은 하나를 해결? 그리고 왜? 이게 뭐야 this.data() 모두

답변

2

둘 중 어느 쪽도 다른 어느 것보다 낫지 않습니다. - 각기 다른 기능을 제공하지만 외관상 유사합니다.

this.data()은 경로의 데이터 컨텍스트를 반환합니다.이 컨텍스트는 본질적으로 경로 내부의 data 함수에서 반환하는 항목입니다.

한편, ready은 대기중인 구독이 반환했음을 나타내는 부울을 반환합니다 (그렇지 않으면 this.ready()). ready의 결과는 데이터가 반환 될 때 을 말하지만 실제 데이터는 거의 제공하지 않습니다.

두 가지 모두 구독 결과를 '대기'하는 데 사용할 수 있지만 중요한 것은 구독을 '준비'할 수 있지만 결과 데이터는 거짓/예를 들어 가짜 _id으로 /posts/:_id 경로를 방문한 결과).

Router.hooks.dataNotFound = function() { 
    if (!this.ready()) { // ready() call 
    this.next(); 
    return; 
    } 

    var data = this.lookupOption('data'); // data() call 
    ... 

    if (!data) { 
    this.render('notFoundTemplate'); 
    return; 
    } 
    ... 

    this.next(); 
}; 

사용 :

둘 사이의 차이의 좋은 그림은 다음 (설명을 위해 단순화가)의 라인을 따라 뭔가를 볼 수있는 IR과 그 선박의 dataNotFound 플러그인입니다 ready 전화 (상태가 변경 될 때마다 재방송)를 호출하면 전체 가입 대기자 명단이 완료 될 때까지 대기 한 다음 데이터가 양호한지 여부를 확인합니다. 그렇지 않은 경우 'notFound'템플릿을 렌더링합니다. 그렇지 않으면 this.next()을 호출하여 다음 후크로 이동합니다.

이 정보가 도움이되기를 바랍니다.

관련 문제