2015-06-15 89 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