路由器Iron Router Meteor的pathFor功能

3

我对这个问题感到很困惑。 我有一个包含两个路径的模板,如下:

Router.route('/companyDataManagement',{
        path:['/companyDataManagement','/companyDataManagement/:_id'],
        name: 'companyDataManagement',
        yieldTemplates:{
            'companyData':{to:'showCompanyData'},
            'companyDetails':{to:'showCompanyDetails'}
        }
});

这很好运行。但我如何在此模板中使用 pathFor <a href="{{pathFor companyDataManagement}}"> 点击 </a>不起作用。

你尝试过使用两条单独的路由吗?每个路径都有一条路由? - Carlos Rodrigues
那会如何解决问题? - user4523328
Router.route('/companyDataManagement/:_id',{}<a href="{{pathFor companyDataManagement _id=this._id}}">Click</a>怎么样?因此,基本上要这样做:http://stackoverflow.com/questions/30467393/meteor-with-iron-route-pathfor - Dan
1
还请看一下这个答案:http://stackoverflow.com/a/30508647/1011724,关于carlosccomp的2条路线建议。 - Dan
@Avishek Gurung,我真的不知道代码中它是如何工作的,但也许helper pathFor无法生成URL,因为它无法选择最佳模式路径。这只是一个猜测(对于糟糕的英语表示抱歉)。 - Carlos Rodrigues
1个回答

0

您能否确认链接中的companyDataManagement是从帮助程序传递的名称,还是您打算将其作为路由调用的名称?如果是后者,则需要像下面一样用单引号括起来。

<a href="{{pathFor 'companyDataManagement'}}">Click</a>

如果你想把 :_id 传递到 pathFor 中,那么它来自于链接所在的数据上下文。如果数据上下文没有提供所需的 id,你需要声明一个对象,在 helper 中将其传递到模板中。
Template.yourTemplate.helpers({
    myContextHelper: function(){
        return {_id:'XXXXXXXXX'}
    }
});

{{#with myContextHelper}}
    <a href="{{pathFor 'companyDataManagement'}}">Click</a>
{{/with}}

这应该给你 /companyDataManagement/XXXXXXXXX

你也可以通过例如 query="q=1" 或 query=qstring 的方式传递查询、哈希和数据变量,其中 qstring 是来自 helper 或 myContextHelper 对象中的对象或字段。

<a href="{{pathFor 'companyDataManagement' query=qstring }}">Click</a>

此外,与问题不严格相关但希望有所帮助的是,从您的代码中看来,您只是将:id作为路径中的可选路由部分,并且模板本身不需要指定:_id,这种情况下,您可以使用?使该部分变为可选项:
path:'/companyDataManagement/:_id?',

你也可以将此用作路由的开头参数,以消除在函数中指定路径的需要:

Router.route('/companyDataManagement/:_id?',{

希望这可以帮到你!如果上述方法不起作用,请告诉我,我很乐意帮助你进行故障排除,如果你能发布一些相关代码的话。

非常简单的解决方案,但在SO上引起了很大的反响。谢谢大家。让我关闭这个问题。是的,这一切都是关于使“_id”变为可选的。 - user4523328

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接