流星模板中的简单数据反射

时间:2013-01-30 10:16:59

标签: javascript node.js mongodb meteor handlebars.js

我是meteor的新手,并且有一个很大的误解,即模板如何处理数据反射。 例如,我在数据库中有一些数据如下:

{name: {firstName: "foo",
lastName: "bar"},
father: "buz"}

我能反映它的方式对我来说真的很可怕。我只能这样反映:

JS:

var Products = new Meteor.Collection("Products");

if (Meteor.isClient) {
  Template.DataTry.dataTryArr = function(){
     return DataTry.find({father: "buz"});
  };
}

HTML:

<head><title>...</title></head>
<body>{{>DataTry}}</body>
<template name="DataTry">
  {{#each dataTryArr}}
    <p>Mr. {{father}} has a son {{name.firstName}}. They are both {{name.lastName}}</p>
  {{/each}}
</template>

正在努力和反思。但我无法理解{{#each}}以及为什么我需要dataTryArr!是没有dataTryArr{{#if dataTryArr}}Template.DataTry = function(){...}等工作无处不在{{#each}}(在那里迭代什么?!)

请帮助我理解如何以这种方式反映简单数据

<head><title>...</title></head>
<body>{{>DataTry}}</body>
<template name="DataTry">
    <p>Mr. {{father}} has a son {{name.firstName}}. They are both {{name.lastName}}</p>
</template>

提前致谢

1 个答案:

答案 0 :(得分:2)

您必须使用{{#each}}{{#with}}块助手来迭代模板助手返回的值。

如果模板助手从集合中返回一堆数据,则可能需要{{#each}}迭代器,以便在DOM中呈现返回的值。如果模板助手返回单个对象,那么可以使用{{#with}}块。

你已经建议了这个:

<body>{{>DataTry}}</body>
<template name="DataTry">
    <p>Mr. {{father}} has a son {{name.firstName}}. They are both {{name.lastName}}</p>
</template>

这不起作用,如果<p> ... </p>返回对象数组,您可以将{{#each}}括在Template.DataTry.dataTryArr()块内。

<template name="DataTry">
  {{#each dataTryArr}}
    <p>Mr. {{father}} has a son {{name.firstName}}. They are both {{name.lastName}}</p>
  {{/each}}
</template>

简单来说,{{#each dataTryArr}}将调用dataTryArr方法,并将迭代返回的值。