我的困境是我想将多个对象属性传递给 meteor 中的iron:router路由。原因是我想向其传递一个属性来命名我的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对象,或创建具有多个属性的对象,但iron:router却没有。

任何帮助表示赞赏,谢谢。

编辑#1:为帮助进一步解释该问题,我的问题与路由到在URL中使用多个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是未定义的。因此,基本上,如何在不将属性作为URL一部分并使用data的情况下,将其传递给this.params呢?

最佳答案

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

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

编辑:

好的,如果您要将任意值传递给url,则可以使用查询参数:
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
        };
    }
);

关于javascript - meteor ,铁:Router Passing Multiple Properties on Router. go,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26851878/

10-15 14:32