Meteor:来自外部 API 调用的数据未呈现

Meteor: Data from External API call not rendering

我对 Meteor 比较陌生,我正在尝试为我的 sister-in-law 创建一个网上商店,从她现有的 Etsy 商店获取数据并在其上放置自定义皮肤。我已经定义了我所有的 Meteor.methods 来检索数据,并且我已经用一系列 console.log 语句验证了数据......所以,数据在那里,但它不会呈现屏幕上。以下是服务器端部分代码的示例:

Meteor.methods({

  ...

    'getShopSections': function() {
      this.unblock();
      var URL = baseURL + "/sections?api_key="+apiKey;
      var response = Meteor.http.get(URL).data.results;
      return response;
    }

  ...

});

这个方法returns一个Object的数组。 JSON 字符串的示例位来自数组返回的 Object 之一:

{
  active_listing_count: 20,
  rank: 2,
  shop_section_id: 1******0,
  title: "Example Title",
  user_id: 2******7
}

顺利获取此数据后,我准备从客户端发起调用,我尝试了几种不同的方式但都失败了,然后 Google 搜索让我找到了这里的教程:https://dzone.com/articles/integrating-external-apis-your

在客户端,我有一个 nav.js 文件,其中包含以下代码,改编自上述教程:

Template.nav.rendered = function() {
    Meteor.call('getShopSections', function(err, res) {
      Session.set('sections', res);
      return res;
    });
};
Template.nav.helpers({
    category: function() {
      var sections = Session.get('sections');
      return sections;
    }
});

还有来自我的 nav.html 模板中的示例调用...

<ul>
  {{#each category}}
    <li>{{category.title}}</li>
  {{/each}}
</ul>

因此,这里发生了一些我不确定的事情。首先,尽管显示了适当数量的 li 占位符,DOM 并未呈现任何 category.title 字符串。其次,在我按照上面的教程进行操作之前,我没有定义 Session 变量。考虑到加载模板后商店类别列表应保持静态,根据我对 Session 变量的理解,我认为没有必要...但出于某种原因,这是模板显示之间的区别单个空 <li> 标记与多个空 <li> 等于 category.length --- 所以,即使我无法理解为什么需要 Session 变量在这种情况下,它确实使我更接近我的目标......我在客户端尝试了一些 console.log 语句,我 100% 确定数据已定义且可用,但是当我在我的开发者工具 window 中检查了源代码,DOM 只显示了一些空的 li 括号。

任何 Meteor 专家都可以解释为什么 1) DOM 没有呈现任何标题,以及 2) 如果确实需要 Session 变量?如果需要更多信息,请告诉我,我很乐意提供。谢谢!

您在使用#each 时设置了数据上下文,因此只需使用:

<li>{{title}}</li>

在不知道你在做什么的情况下很难确定 Session 是否是在这里使用的正确类型的反应变量,但我粗略的猜测是 Mini Mongo 集合可能更适合什么看来你在做。

为了让您开始确定用于此目的的反应变量的正确类型,请转到 full Meteor documentation 并调查:集合、会话和反应变量。

编辑:退一步澄清一下,模板助手称为反应式计算。只有在它们各自的模板中使用并且在计算中使用反应变量时,助手内部的反应式计算才会执行。反应变量有多种类型,每种都有自己的属性。在您使用 Session 之前,您的代码可能根本不起作用,因为您没有使用反应变量。