Meteor,Iron:路由器在Router.go上传递多个属性

时间:2014-11-10 19:52:32

标签: javascript meteor routes iron-router

我的困境是我想将多个对象属性传递给一个铁路:Meteor中的路由器路由。原因是我想传递一个属性来命名我的url和一个属性来查找一个集合项目。它们完全相互独立,我不能使用url属性,因为它不是集合项中的值。这就是我所拥有的:

Template.items.events({
'click': function () {
    itemName = this.name.replace(/ /g,'')
    Router.go('itemDetails', {itemName: itemName})
    }
});

问题是虽然路由器处理这个问题并将我发送到正确的URL,但我无法使用itemName来查找我正在寻找的集合项对象(假设这是不可能的)。

Router.route('/items/:itemName', {
    name: 'itemDetails', 
    data: function() {return Items.findOne({name: this.params.itemName})}
});

上述路由器配置不会返回任何内容,因为name != this.params.itemName表示任何对象。

我已尝试传递this对象,或创建具有多个属性的对象,但铁:路由器不会拥有它。

感谢任何帮助。

编辑#1:为了帮助进一步解释问题,我的问题与路由到在网址中使用多个ID的网页相同。例如,我如何将属性传递给iron:router来填充:_id:itemId属性?

Router.route('items/:_id/:_itemId', {
    name: 'detailDetails',
    data: function() {...}
});

编辑#2:我特意想做的是将两个属性传递给iron:router并将其中一个附加到URL,另一个用于路由的data属性以返回一个集合项。例如:

....
    Router.go('itemDetails', {_id: itemBeingPassedId, itemName: nameToBeAppendedToURL})
....

Router.route('/items/:itemName', {
    name: 'itemDetails',
    data: function(){return Items.findOne(_id)
});

每当我尝试这样做时,都会说_id未定义。基本上,如何将属性传递给data而不将其作为网址的一部分并使用this.params

1 个答案:

答案 0 :(得分:8)

问题是如何将多个参数传递给Router.go?只需将它们全部放在第二个参数的对象中:

Router.go('itemDetails', {_id: 'foo', '_itemId': bar});

编辑:

好的,如果要将任意值传递给网址,可以使用查询参数:

Router.go('itemDetails', {itemName: 'foo'}, {query: 'id=bar'});

虽然id仍然在url中,但它看起来像这样:

http://example.com/items/foo?id=bar

你可以像这样检索它:

Router.route('/items/:itemName', {
    name: 'itemDetails',
    data: function(){
        return {
            item: Items.findOne(this.params.query.id),
            itemName: this.params.itemName
        };
    }
);