Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Meteor路由器路由属性未定义_Javascript_Meteor - Fatal编程技术网

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的内容吗?或者可能是菜单项不存在。菜单项确实存在。在检索数据之前加载页面。