2015-06-30 90 views
0

我有以下击溃流星路由器力重新呈现

/产品/ 123

/产品/ 456

模板呈现的产品数据,并允许用户拖动

东西当我重定向到另一个产品那样

Router.go("product",{_id:"456"}); 

t他模板更新数据但不重新呈现html。这意味着用户拖动的内容保持原样。这有利于一些案件,但不是我的

只为我工作的解决方案是重定向到设定了明确的模板另一个页面并重定向到产品页面

我的路由器功能:

Router.route('product/:_id/', { 
    name:"product", 
    data:function(){ 
     var data = {product: Products.findOne({_id:objectId(this.params._id)})} 
     return data; 
    }, 
    waitOn:function(){ 
     return Meteor.subscribe('Products',this.params._id); 
    }, 
    yieldTemplates: {'product': {to: 'mainArea'}}, 
}); 

我需要一种方法来告诉路由器或模板重置HTML

+0

我记得过去有一个同样的问题,但我现在找不到它。我用一个简单的良率创建了一个基本的[MeteorPad](http://meteorpad.com/pad/73CtXWb28TEBPwEAo/Leaderboard),它似乎工作得很好。你能基于这个创建一个repro吗?另外,请参阅GitHub上的[此评论](https://github.com/iron-meteor/iron-router/issues/1337#issuecomment-98835589),它可能是相关的。 – MasterAM

+0

您与MeteorPad的链接不起作用 –

+0

奇怪,我只是在隐身模式下测试它,它工作得很好。你有什么? – MasterAM

回答

1

一种解决方案是建立在模板的onRendered功能的自动运行,以查找更改URL参数和复位模板根据需要。事情是这样的:

Template.myTemplate.onRendered(function() { 

    var controller = Router.current() 
    this.autorun(function() { 
     var params = controller.getParams() // Reactive 

     // Clear up your drag interface here 
    }); 
}); 

通过访问controller.getParams()(路由控制器反应参数列表)当你的路线之间移动同一模板的逃脱将被调用。

+0

这很好,但我不想手动清理UI。我想让模板重新渲染,就好像它是一个新的模板 –

+0

好的,但是你正在与系统打交道。最重要的是尽量减少DOM重绘。如果页面内容基于数据上下文,则页面的所有这些部分都将被正确更新。我不知道你的应用程序,但在我看来,只需拖拽UI相对渲染(或手动刷新它)就是最好的* Meteor-type *方法。 – tarmes

+1

是的,我明白这一点,但应该有一种方法来重置模板... –