Javascript Meteor路由器路由属性未定义
我有这样一条路线:Javascript Meteor路由器路由属性未定义,javascript,meteor,Javascript,Meteor,我有这样一条路线: Meteor.Router.add({ '/:menuSlug': function(menuSlug) { Template.menu.items = function() { return Items.find({menuId: Menus.findOne({slug: menuSlug})._id}); } return 'menu'; } }); 然而,当我浏览到/my test slug时,我得到了这个错误 Unca
Meteor.Router.add({
'/:menuSlug': function(menuSlug) {
Template.menu.items = function() { return Items.find({menuId: Menus.findOne({slug: menuSlug})._id}); }
return 'menu';
}
});
然而,当我浏览到/my test slug时,我得到了这个错误
Uncaught TypeError: Cannot read property '_id' of undefined
我认为这是相关的,但由于我没有使用Meteor.user()反应式集合,因此我不确定在正确获取数据后如何重新呈现此页面。有什么想法吗?最好将模板帮助程序与路由器代码分开,并使用会话哈希来存储消息:
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加载到页面时)。因此,您需要考虑本地集合中可能还没有数据的情况。我想您指的是var item=Menus.findOne({slug:Session.get('menuSlug'));当我尝试这样做时,它会加载页面,但模板缺少数据(因此没有错误,这就是进度)。那么,如何使该会话变量成为被动变量,以便在适当获取数据后立即加载到模板中?如果通过set/get使用“session”散列,它将自动成为被动变量。如果没有,则可能是缺少菜单或项目的问题。把你收藏的东西寄回去。(您可以通过运行Menus.find().fetch()和Items.find().fetch在js控制台中检查menuSlug的内容吗?或者可能是菜单项不存在。菜单项确实存在。在检索数据之前加载页面。