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

时间:2015-01-31 20:34:15

标签: javascript meteor iron-router

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

 '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);
        }
    });

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

这是使用get属性Im设置

的Template.helper Im
       Template.speaker.helpers({

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

        });

2 个答案:

答案 0 :(得分:1)

  

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

铁路由器提供了许多hooks

  • onRun< - 可能是您需要的
  • onRerun
  • onBeforeAction
  • onAfterAction
  • 的onStop

答案 1 :(得分:1)

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

在你的情况下:

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

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