在blaze中迭代json对象数组

时间:2015-11-05 15:56:45

标签: javascript meteor meteor-blaze

我是流星的新手,我正在努力使用MSXML2.DomDocument进行大火。 我尝试了this answer on stackoverflow,但我的要求略有不同。

我有一个json对象数组:

Dim fs,t,x
Set fs=Server.CreateObject("Scripting.FileSystemObject")
Set t=fs.OpenTextFile("path_to_xml_file",1,false)
x=t.ReadAll
t.close
Response.Write("The text in the file is: " & x)

如何在流星项目中使用blaze(特别是使用#each迭代数组)显示每个对象的firstName。

我尝试了很多不同的方法,使用多种辅助方法,但我无法实现。如果有人可以请求帮助。

另外,如果不可能,请告诉替代方案以实现相同目标。

数据来自API调用,数据格式是json对象,但是存储为Session变量(这样我将在helper方法中使用{来自{} {1}})。

2 个答案:

答案 0 :(得分:2)

这将取决于您的数据来自何处。在我的示例中,您可以使用对象的源替换我的硬编码变量。如果你添加它来自哪里,我可以修改我的解决方案。

基本上,您只需使用辅助函数返回JSON对象内的对象数组。在那里,您可以在#each块中调用帮助程序,并直接使用firstName

引用{{firstName}}

<强>模板

<template name="yourTemplateName">
    {{#each accounting}}
        {{firstName}}
    {{/each}}
</template>

<强>辅助

Template.yourTemplateName.helpers({
    accounting: function () {
        var data = Session.get('apiResponse');
         //You return the array of objects, which can then be iterated with each
        if (!_.isEmpty(data)){
            return data.accounting;
        } else {
            return []
        }
     }
});

答案 1 :(得分:1)

我假设API响应位于名为apiResponse的会话变量中。

按如下方式定义帮助器:

Template.body.helpers({
  response: function () { 
    return Session.get('apiResponse');
  }
});

在模板中,使用#with模板标记调用响应帮助程序以设置数据上下文,并使用#each模板标记在此标记内迭代记帐数组。

<body>
  {{#with response}}
    {{#each accounting}}
      <p>{{firstName}} {{lastName}} is {{age}} years old.</p>
    {{/each}}
  {{/with}}
</body>

您将在浏览器窗口中看到此内容 -

John Doe is 23 years old.

Mary Smith is 32 years old.

Mike Nolan is 21 years old.