使用模态和铁路由器维护数据上下文?

时间:2015-06-09 13:45:52

标签: meteor iron-router

我正在使用铁路由器渲染模态,但是想要为模态所在的任何页面维护当前数据上下文,是否有办法让它触发动作但不会杀死任何当前的子/数据上下文?

Router.route('/box', {
  name: 'box',
  controller: 'AppController',
  action: function () {
    this.render('box', { to: 'modal' });
    $('.coverall').fadeIn(function() {
      $('.contain').addClass('blur');
    });
  }
});

2 个答案:

答案 0 :(得分:1)

如果我理解了这个问题,您可以使用Blaze.renderWithData

例如,假设您想要使用简单的_id渲染模态。

所以你可以使用类似的东西。

Template.myNormalTemplate.events({
 'click .openModal':function(){
   var data = {
     _id:this._id
    };
   Blaze.renderWithData(Template.MyModalTemplate,data,document.body);
 }
});

然后在你的模态模板上使用它。

<template name="myModalTemplate">
 <!-- Modal content here -->
</template>

Template.myModalTemplate.onRendered(function(){
  var _this = this;

  //this will open the modal when you call it with Blaze.renderWithData
  $(modalId).modal();

  console.log(_this.data)//this will print the data object you pass on the event
});

或者您可以在任何事件或帮助者上访问它们。

Template.myModalTemplate.helpers({
  myIdFromOtherView:function(){
    var instance = Template.instance();
    return instance.data._id
  }
 });

你明白了......

答案 1 :(得分:0)

因此,在铁路由器中,这似乎是一个无法解决的问题,因为在导航到新路由时它总会破坏数据上下文和结束订阅。

唯一可行的解​​决方案是真正不使用Iron Router,将其替换为类似流路由器的东西,并在模板级订阅中管理订阅和数据上下文。