路由数据无法在模板中访问

Route data not accessible in template

我从路由访问数据时遇到问题。

路由器

Router.route('/view/:_id', {
    name: 'locationView',
    data: function() { return Locations.findOne(this.params._id); }
});

Locations 是我订阅的 MongoDB 合集。我可以通过另一个模板上的辅助方法毫无问题地访问它。它有名称、地址等对象

模板

<template name="locationView">
    <h1>{{name}}</h1>
</template>

演示

Application hosted on meteor.com

在首页上,您可以看到 Locations 中的条目可以通过辅助方法从其他模板访问。那么为什么我不能通过路由中的数据对象访问它们?


解决方案

问题是通过 mongo shell 添加对象。这导致 ObjectID(xxx) 内容出现在对象的 _id 中。

我通过收集方法添加了一些测试对象'insert',一切正常!

我刚试过你的申请,我看到了这个 url:

http://mhaehnel-compass.meteor.com/view/ObjectID(%22554e58c15eb2cd41fc085c0e%22)

ObjectID() 部分仅用于 mongodb,不应该在您 url 中。这就是为什么 meteor 没有按照您的预期进行操作。这可能是您如何将 link 设置为 locationView 路线

的示例

{{pathFor 'locationView' _id = this._id}}

希望对您有所帮助

在您的路由中定义的 data 存储在您的模板实例中,因此 Template.instance().data。您也可以使用 this.data:

onRendered 中访问它
Template.locationView.onRendered(function () {
  var data = this.data;
});

解决方案

问题是通过 mongo shell 添加对象。这导致 ObjectID(xxx) 内容出现在对象的 _id 中。

我通过收集方法添加了一些测试对象'insert',一切正常!