我正在使用铁路由器渲染模态,但是想要为模态所在的任何页面维护当前数据上下文,是否有办法让它触发动作但不会杀死任何当前的子/数据上下文?
Router.route('/box', {
name: 'box',
controller: 'AppController',
action: function () {
this.render('box', { to: 'modal' });
$('.coverall').fadeIn(function() {
$('.contain').addClass('blur');
});
}
});
答案 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,将其替换为类似流路由器的东西,并在模板级订阅中管理订阅和数据上下文。