无法从两个集合中呈现数组

时间:2014-06-17 07:34:43

标签: meteor

尝试构建应用程序,如此

enter image description here

App有两个集合

{
    "_id" : "S7mGgtJhiQ3GZavqn",
    "cast_id" : [
        "pBnAFGaxNGLkDGuPk",
        "7HZkmd6BofNmjXRyw"
    ],
    "date" : "31-May-2014",
    "name" : "Rakshak",
    "vote" : 4
}

铸造

{
    "_id" : "pBnAFGaxNGLkDGuPk",
    "link" : "http://en.wikipedia.org/wiki/Poonam_Dhillon",
    "name" : "Poonam Dhillon"
}
{
    "_id" : "7HZkmd6BofNmjXRyw",
    "link" : "http://en.wikipedia.org/wiki/Rishi_Kapoor",
    "name" : "Rishi Kapoor"
}

我写过模板,就像这样

<template name="movies">
    {{#each movies}}
        {{> movie}}
    {{/each}}
</template>

<template name="movie">
    {{> vote}}
    <h3><span class="name"><b>{{name}}</b></span><br></h3>
    <span class="date"><b>Release Date:</b> {{date}}</span><br>
    <span class="cast"><b>Cast:</b></span>
    {{#each casts}}
        {{> cast}}
    {{/each}}
    <br>
</template>

<template name="casts">
    {{#each cast}}
        <a href="{{link}}">{{name}}</a>&#44;
    {{/each}}
</template>

和模板经理

Template.movies.helpers({
    movies : function () {
      console.log("inside movies helper");
      return Movies.find();
    }

      });

  Template.movie.helpers({
    casts : function () {
      console.log("inside movie.helpers");
      console.log(this);
      return Cast.find({_id: this._id}) ;

    }

  });

我已经尝试了很多,但无法使用 Cast 中的演员链接呈现名称。?

2 个答案:

答案 0 :(得分:2)

使您的示例工作所需的修复程序很少,所以我决定创建快速的流星项目: https://github.com/parhelium/meteor-so-movies-cast

结果:

result

固定代码:

<template name="cast">
    <a href="{{link}}">{{name}}</a>&#44;
</template>


Template.movie.helpers({
    casts : function () {
        console.log("inside movie.helpers");
        console.log(this);
        return Casts.find({_id: {$in:this.cast_id}}) ;
    }
});

答案 1 :(得分:0)

您的代码无效,因为您没有在影片对象上使用cast_id数组。 相反,你试图找到与电影相关的_id的演员表。在电影模板助手中,数据上下文设置为电影对象。

相反,您应该将数据上下文设置为演员模板的cast_id条目,如下所示:

电影模板:

{{#each cast_id}}
    {{> cast }}
{{/each}}

投射模板:

{{#with getCast}}
     DostuffwithData from getCast
{{/with}}

getCast模板助手:

 Template.cast.getCast = function () {
      return Cast.find(this);
 }