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

时间:2015-12-08 01:42:15

标签: javascript api meteor etsy

我对Meteor相对较新,我正在尝试为我的嫂子创建一个网上商店,从她现有的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;
    }

  ...

});

此方法返回Object数组。来自阵列中返回的对象之一的JSON字符串示例:

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

在轻松获取此数据后,我已准备好从客户端拨打电话,在谷歌搜索让我参与本教程之前,我尝试了以几种不同的方式失败: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变量。考虑到加载模板后商店类别列表应保持静态,我认为根据我对会话变量的理解,我认为没有必要...但由于某种原因,这是显示单个空{的模板之间的差异{ {1}}标记与一些空的<li>等于category.length ---所以,即使我无法理解为什么在这个实例中需要Session变量,它确实给我一个感知更接近我的目标...我在客户端尝试了一些console.log语句,我100%确定数据已定义并可用,但当我在Developer Tools窗口中检查源代码时, DOM只显示了一些空的<li>括号。

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

1 个答案:

答案 0 :(得分:0)

使用#each时设置数据上下文,只需使用:

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

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

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

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