0

我对 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/集成-外部-API-您的

在客户端,我有一个 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 变量,它确实让我认为离我的目标更近了一步......我已经尝试了一些控制台.log 语句在客户端,我 100% 确定数据已定义且可用,但是当我在开发人员工具窗口中检查源代码时,DOM 只显示一些空li括号。

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

4

1 回答 1

0

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

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

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

为了让您开始决定用于此的正确类型的反应变量,请参阅完整的 Meteor 文档并调查:集合、会话和反应变量。

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

于 2015-12-08T02:32:57.417 回答