Meteor - 使用Iron Router的多个数据上下文

时间:2015-06-15 09:34:52

标签: meteor iron-router

我刚刚开始使用Meteor和Iron Router。

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

这是我的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>

我通过在返回数据的模板上使用帮助程序解决了这个问题,但更愿意从路由中获取所有帮助。

那么关于这个的任何想法?有没有更好的方法来实现这一点,或者是否可以通过Iron Router传递两个数据上下文,在这种情况下,如何实现?

1 个答案:

答案 0 :(得分:1)

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

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

然后在您的模板中,您可以使用{{package.property}}{{#each listItems}}来引用数据上下文。