onBeforeAction运行得太晚了



我有一个带有帮助程序的页面,该助手依赖于使用 onBeforeAction 在路由时设置的id_sell变量。当前的问题是帮助程序在设置变量之前运行。

this.route('/chat_id', {
    path: '/chat/:_id',
    template: 'Messages',
    layoutTemplate: 'LayoutMessages',
    onBeforeAction: function() {
      id = Session.get("recipientId");
      id_sell = this.params._id;
      this.next();
       }
    })

如您所见,此处设置了此id_sell变量。

不幸的是我收到错误

模板帮助程序中的异常:引用错误:未定义id_sell

当我的助手尝试加载全局变量的值时。

如何解决此加载错误

看起来您正在使用铁路由器,在这种情况下,您可以将路由定义更改为

this.route('/chat_id', {
    path: '/chat/:_id',
    template: 'Messages',
    layoutTemplate: 'LayoutMessages',
    data: function() {
        return {
            id: this.params._id
        }
   }
})

Messages模板中,您可以访问Template.currentData().id以访问变量。

然后,如果要从集合中加载某些内容,可以将路由更改为

this.route('/chat_id', {
    path: '/chat/:_id',
    template: 'Messages',
    layoutTemplate: 'LayoutMessages',
    waitOn: function() {
        return Meteor.subscribe('messages');
    },
    data: function() {
        return {
            id: this.params._id,
            messages: Messages.find({ chatId: this.params._id })
        };
    }
});

然后模板将有可用的Template.currentData().messages{{#each messages}}将在 HTML 中工作。

(显然,相应地将

messagesMessages替换为您的出版物和馆藏的名称)。

最后,您可以将this.params._id传递到Meteor.subscribe(...)调用中,以仅订阅您关心的项目 - 但那是另一回事。

您可以使用 Session 在帮助程序运行之前获取此变量的值。例如

库/路由器.js

Router.route('/chat/:_id', function(){
    Session.set("chatId", this.params._id);
    this.render("chatTemplate", {to:"main"});
});

主.js

在这里使用:

var id_sell = Session.get("chatId");

变量将在帮助程序运行之前设置在此处。

最新更新