onBeforeAction运行得太晚了

时间:2016-03-13 22:34:51

标签: javascript meteor helpers

我有一个带帮助程序的页面,它依赖于使用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 var在此处设置。

不幸的是我收到了错误

  

模板助手中的异常:ReferenceError:未定义id_sell

当我的助手试图加载全局变量的值

如何解决此加载错误

2 个答案:

答案 0 :(得分:1)

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

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(...)来电,只订阅您关注的项目 - 但这是另一个故事。

答案 1 :(得分:0)

在helper运行之前,您可以使用Session来获取此变量的值。例如,

  

LIB / router.js

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

main.js

这里使用:

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

在助手运行之前,变量将在此处设置。