2015-06-15 48 views
1

我刚开始使用流星和铁路由器。流星 - 与铁路路由器的多个数据上下文

在这里,我试图使用两个数据上下文,但显然我做错了。我已经使用了它,但它似乎并不是一个很常见的问题,但我想它可能传递两个或更多的数据上下文,对吧?

这是我routing.js

Router.route('/package/:_id', function() { 
     //Returns the selected/clicked package 
     var package = Packages.findOne({_id: this.params._id}); 
     //Returns all items in Items collection. 
     var listItems = Items.find(); 
     this.render('PackageDetails', {data: package, listItems}); 
    }); 

我的模板中,我试图从两种情况下使用的数据(其中一个用于填充一个下拉列表和一个显示所选包的数据

<template name="PackageDetails"> 
    <label class="label label-default">Item type: </label><p>{{ item }}</p> 
    <label class="label label-default">Quantity: </label><p>{{ quantity }}</p> 
    <label class="label label-default">Id: </label><p>{{ _id }}</p> 

    <form class="change-state"> 
     <div class="input-group"> 
     {{> sAlert}} 
     <select class="form-control" name="state"> 
      <option selected="true" disabled>Select State</option> 
      {{#each states}} 
       <option>{{name}}</option> 
      {{/each}} 
     </select> 
     </div><br> 

     <div class="input-group"> 
     <input type="submit" value="Change state" class="btn btn-success"/> 
     </div> 
    </form><br> 
</template> 

我解决它通过使用其返回的数据模板的帮手,但宁愿从路由得到这一切。

所以这个任何想法?是否有更好的一个pproach实现这一点,还是有可能通过铁路路由器传递两个数据上下文,在这种情况下,如何?

回答

1

你的数据对象声明语法是错误的,它应该是:

this.render('PackageDetails', { 
    data: { 
    package: package, 
    listItems: listItems 
    } 
}); 

然后在你的模板,你可以参考使用{{package.property}}{{#each listItems}}数据上下文。

+1

谢谢!我已经尝试了一些与此类似的不同语法,但显然不是这样。顺便说一句,你是否知道this.route和Router.route之间的区别,猜测它基本上是相同的(旧的和新的语法?)。看到他们两个,但不知道要使用哪一个... –

+0

没有什么区别,但使用'Router.route',它是更新的语法。 – saimeunt