2014-07-01 2 views
0

MongoDB 데이터베이스에서 파일을 읽으려고합니다. MongoDB에서 필드를 반환하는 Meteor은 콘솔에서 작동하지만 응용 프로그램에서는 작동하지 않습니다.

Uncaught TypeError: Cannot read property 'iati' of undefined

내가 내 MongoDB를 수집 내에서 특정 서브 필드를 반환해야 템플릿 도우미를 정의 : 내 응용 프로그램에서 나는 다음과 같은 오류가 발생하면서 콘솔에서 응답이 올바른 것입니다. 그러나 다음은 작동하지 않는 것 같습니다 (나는 앞서 언급 한 오류가 발생합니다).

{{test.iati}} 

그러나, 나는를 사용하려면 : 템플릿 내에서 특정 필드를

Template.hello.helpers({ 
    test: function() { 
     return Test.findOne(); 
    } 
}); 

그리고 전화 : 제대로 작동 무엇

Template.hello.helpers({ 
    test: function() { 
     return Test.findOne().iati; 
    } 
}); 

는 전체 개체를 반환하는 것입니다 JavaScript 스크립트 내의 데이터. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

클라이언트가 컬렉션에서 문서를 받기 전에 도우미 기능이 실행됩니다. 'Test.findOne()'은'undefined'로 평가 될 것이고, 이것은 당신의 에러 메시지에 따라 'iati' 속성을 가지고 있지 않습니다. 도우미가'Test.findOne()'의 결과를 반환하고 템플릿에'{{test.iati}}'를 사용하면'{{test.iati}}'는'test.iati' 만' test' 속성은'iati'입니다 (그렇지 않으면 아무것도 표시되지 않습니다). –

답변

0

Tests.findOne() 같은 수집 방법은 이미 가져온 문서를 클라이언트의 Minimongo 복사본으로 반환합니다. 문서를 가져 오기 전에 findOne()은 null을 반환합니다. 로드

Template.hello.helpers({ 
    test: function() { 
    if(! Test.findOne()) return; 
    return Test.findOne().iati; 
    }, 
}); 

또한 적절한 문서를 보장하기 위해 철 라우터에 가입 기다릴 수 :

당신이 계산을 진행하기 전에 단순히 도우미에서 결과를 확인,이에 대해 보호하기 위해

this.route('routeName', { 
    ... 
    onBeforeAction: function() { 
    this.subscribe('subscriptionName').wait(); 
    ... 
    }, 
    ... 
}); 
관련 문제