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

时间:2015-05-11 11:23:47

标签: meteor iron-router

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

路由器

<link href="https://cdnjs.cloudflare.com/ajax/libs/skeleton/2.0.4/skeleton.min.css" rel="stylesheet"/>

<style>
  .debug {
  border: solid;
  border-color: red;
  }  
</style>

<div class="row">
  <div class="six columns debug" style="height: 100px;">A</div>
  <div class="six columns debug" style="height: 300px;">B</div>
</div>

<div class="row">
  <div class="six columns debug" style="height: 100px;">C</div>
  <div class="six columns debug" style="height: 300px; display:none;">D</div>
</div>

Router.route('/view/:_id', { name: 'locationView', data: function() { return Locations.findOne(this.params._id); } }); 是我订阅的MongoDB Collection。我可以通过另一个模板上的辅助方法访问它而不会出现问题。它有名称,地址等对象。

模板

Locations

演示

Application hosted on meteor.com

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

解决方案

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

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

3 个答案:

答案 0 :(得分:1)

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

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

ObjectID()部分仅适用于mongodb,不应该在你的网址中。这就是为什么meteor没有做你想要的事情。这可以是一个如何设置链接到locationView路径

的示例

{{pathFor&#39; locationView&#39; _id = this._id}}

希望这有帮助

答案 1 :(得分:1)

路线中定义的data存储在您的模板实例ergo Template.instance().data中。您也可以使用onRendered

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

答案 2 :(得分:0)

解决方案

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

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