2013-05-09 3 views
0

나는 다음과 같이 설정 경로가 : 내 테스트-슬러그 /를 탐색 할 때, 그러나유성 라우터는 경로 속성 정의되지 않은이

Meteor.Router.add({ 
    '/:menuSlug': function(menuSlug) { 
     Template.menu.items = function() { return Items.find({menuId: Menus.findOne({slug: menuSlug})._id}); } 
     return 'menu'; 
    } 
}); 

을, 나는

Uncaught TypeError: Cannot read property '_id' of undefined 

내가 생각이 오류를 얻을 이것은 https://stackoverflow.com/a/14107148/979315과 관련이 있지만 Meteor.user() 반응 콜렉션을 사용하지 않기 때문에 일단 데이터가 적절히 반입되면이 페이지를 다시 렌더링하는 방법을 모르겠습니다. 이견있는 사람?

+0

menuSlug?의 내용을 확인 했습니까? 이거나 메뉴 항목이 존재하지 않을 수 있습니다. –

+0

메뉴 항목이 존재합니다. 페이지가로드되어 데이터가 검색됩니다. –

답변

0

라우터 코드에서 템플릿 도우미를 분리해서하고 메시지 저장하는 세션 해시를 사용하는 것이 더 좋을 수도 :

Meteor.Router.add({ 
    '/:menuSlug': function(menuSlug) { 
     Session.set("menuslug", menuSlug); 
     return 'menu'; 
    } 
}); 

Template.menu.items = function() { 
    var item = Menus.findOne({slug: menuSlug}); 
    if(item) return Items.find({menuId: item._id}); 
}); 

다른 문제는 데이터가 나중에 내려 보낸 것이 될 수 있습니다. 따라서 잠시 동안 데이터가 없을 수도 있습니다 (특히 URI를 페이지에 직접로드하는 경우). 따라서 지역 컬렉션에 데이터가없는 상황을 고려해야합니다.

+0

당신이 var item = Menus.findOne ({slug : Session.get ('menuSlug')})를 의미한다고 생각합니다. –

+0

이것을 시도하면 페이지가로드되지만 템플릿에 데이터가 누락되었습니다 (오류가 발생하지 않으므로 진행되지 않습니다). 그렇다면 데이터를 적절하게 가져 오는 즉시 템플릿에로드되도록이 세션 변수를 반응 형으로 만들려면 어떻게해야합니까? –

+0

set/get을 통해 'Session'해시를 사용하면 자동으로 반응을 보입니다. 그렇지 않은 경우 메뉴가 누락되거나 항목이 누락 된 문제 일 수 있습니다. 컬렉션에있는 게시물을 게시합니다. (이것은 Menus.find(). fetch() 및 Items.find()를 실행하여 확인할 수 있습니다. js 콘솔에서 가져 오기 – Akshat

관련 문제