Session.set() 在 Meteor 中发生路由事件

Session.set() upon route event in Meteor

我有这个与点击按钮相关的功能:

 'click .single-speaker-info a': function(ev, speaker){
    ev.preventDefault();
    Session.set('selectedDocId', this._id);
}

但我希望它在到达这条路线时发生

Router.route('speaker', {
        path:'/speakers/:_id',
        template: 'speaker',
        data: function(){
            return Speakers.findOne(this.params._id);
        },

        //my attempted solution
        selectedDocId: function(){
            Session.set('selectedDocId', this._id);
        }
    });

但是我找不到任何关于如何在路由上执行方法的文档。

这是 Template.helper Im 使用 get 属性 Im 设置

       Template.speaker.helpers({

            editingDoc: function(){
                return Speakers.findOne({_id: Session.get('selectedDocId')});
            }

        });

But I can't find any documentation on how to execute a method on a route.

Iron Router 提供了一些 hooks:

  • onRun <-- 可能是你需要的
  • 重新运行
  • onBeforeAction
  • onAfterAction
  • 停止

您可以使用 Template.x.rendered,一旦页面呈现,将执行该块中的任何代码。当然这不会在你的路由器中。

你的情况:

Template.speaker.rendered = function() {
    //Get data from router
    var data = Router.current().data();

    Session.set('selectedDocId', data._id);
}