我刚刚开始使用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传递两个数据上下文,在这种情况下,如何实现?
答案 0 :(得分:1)
您的数据对象声明语法错误,应该是:
this.render('PackageDetails', {
data: {
package: package,
listItems: listItems
}
});
然后在您的模板中,您可以使用{{package.property}}
和{{#each listItems}}
来引用数据上下文。