【问题标题】:Accessing minimongo from template helper meteor / mongodb从模板助手流星 / mongodb 访问 minimongo
【发布时间】:2015-04-21 17:13:27
【问题描述】:

我正在尝试在 html 页面中访问我在 Minimongo 中的 Products 集合。当我在浏览器控制台中时,我可以输入Products.findOne();,它会返回一个产品。

但是,当我尝试从模板帮助程序返回产品时,我得到了未定义的结果。有人想吗?

Template.Tires.onRendered(function() {
 console.log(Products.findOne());
 //after I return a product item, I need to modify its properties manually after it has loaded into the client 

});

【问题讨论】:

  • 听起来您在尝试访问客户端数据库 (Products) 之前它从服务器接收到数据。当您在控制台中键入查询时,集合一直有时间接收它需要的任何内容,但如果您在准备好之前立即执行查询(例如在帮助程序中),那么您将不会得到任何回报。尝试发布您的路由器/模板代码(如果有),以便我们有一些上下文可以处理。
  • 谢谢 - 我发布了我的模板代码。如果是这种情况,有没有办法可以延迟查询,直到数据加载完成?
  • 除了少数例外,流星中不使用脚本标签。相反,请使用助手。我真的建议您在感到沮丧之前先学习基础知识meteor.com/learn
  • @MattK 是对的,您首先需要一些学习资源。因此,如果没有关于您想要实现的目标的更多上下文(简单地记录数据,在模板中使用它,...),将很难正确回答。至于您的问题,请关注:SubscriptionsCollectionswhat a reactive variable isTrackerTemplate helpers。文档研磨!
  • 嗨 - 我已经阅读并且对流星基础知识有适当的理解。我正在以这种非正统的方式对此进行编码,以解决与具有我无法覆盖的内部订阅/发布功能的第 3 方包相关的问题。因此,我试图在数据到达 minimongo 的客户端后访问和操作数据......请参阅我更新的问题。任何帮助将不胜感激!

标签: javascript mongodb meteor minimongo


【解决方案1】:

简单的答案: 在辅助函数中对集合进行任何修改,然后返回一个 JS 对象。例如,如果您的收藏看起来像这样:

SomeColleciton
  _id
    type: String
  birthday:
    type: Date
  firstname:
    type: String
  lastname:
    type: String
  timezone:
    type: Integer

您可以执行以下操作来转换它

Template.Tires.helpers({
  user: function(userId) {
    var u = SomeCollection.findOne(userId);
    var age = calcAge(u.birthday);
    var ifworkinghour = calcifworkinghour(u.timezone);
    return {name: u.firstname + ' ' + u.lastname, age: age, workinghour: ifworkinghour}

});

【讨论】:

  • 谢谢。所以这将返回一个用户的信息。要在模板中调用它,我可以这样做 {{user('someUserid')}},对吗?
  • 是的。尽管语法正确,但 {{user someUserId}} 是可行的。
猜你喜欢
  • 2015-04-15
  • 1970-01-01
  • 2016-02-12
  • 2015-09-05
  • 1970-01-01
  • 1970-01-01
  • 2015-06-11
  • 2016-03-04
  • 1970-01-01
相关资源
最近更新 更多