在Meteor中使用带有参数的#each

时间:2015-08-17 00:35:53

标签: mongodb meteor meteor-blaze spacebars

我是Meteor框架的新手,我试图用meteor + mongo + spacebars显示一些数据。问题是我可能需要在空格键#each中使用一个参数,并且它不允许它。

我的代码:

$ file.js

  Template.home.helpers({
      places: function() {
          return Places.find();
      }
  });

  Template.content.helpers({
    images: function() {
        return Images.find({});
     }
  }); 

$ file.html

<template name="home">    
    {{#each places}}
        {{>content}}
    {{/each}}
</template>

<template name="content">
    <li>{{name}} - {{date}}</li>
    {{#each images}}
        <img src="{{this.url}}">    
    {{/each}}
</template>

我想做的 - 它没有用 - 就是在Template.content.helper函数中使用一个参数,如下所示:

  Template.content.helpers({
    images: function(ARG) {
        return Images.find({place: ARG});
     }
  }); 

并在html文件中

<template name="content">
    <li>{{name}} - {{date}}</li>
    {{#each images {{name}} }}
        <img src="{{this.url}}">    
    {{/each}}
</template>

你们有任何想法如何正确显示信息吗?我不想显示每个地方的所有信息(图片)。我想只显示那个地方的图像...

提前致谢, 马库斯

2 个答案:

答案 0 :(得分:2)

由于帮助程序的实现可以像这样访问当前数据上下文,因此您无需将{{name}}作为参数传递。而是使用{{name}}在帮助程序中访问this.name

<强>玉

<template name="content">
  <li>{{name}} - {{date}}</li>
  {{#each images}}
    <img src="{{this.url}}">    
  {{/each}}
</template>

<强> JS

Template.content.helpers({
  images: function() {
    place = this.name;
    return Images.find({place: place});
  }
}); 

答案 1 :(得分:1)

好的,我可以使用以下代码完成我想要的操作:

file.html

<template name="content">
    <li>{{name}} - {{date}}</li>   
    {{#each images name}}
        <img src="{{this.url}}">    
    {{/each}}
</template>

(这意味着我必须删除双括号)

然后在file.js

Template.content.helpers({
    images: function(location) {
        console.log(location);
        return Images.find({"metadata.location": location});
    }
  });

我希望它也有助于其他人。