Meteor Blaze显示阵列

时间:2016-08-02 12:52:07

标签: meteor handlebars.js meteor-blaze

我有这样的集合:

enter image description here

我想以object.questions.teema为例进行迭代。

我有帮手:

Template.game.helpers({
    theGame: function() {
        var theGame = Game.findOne({_id:"LhQmaZKW8eJNenyX9"})
        console.log(theGame)
        return theGame
    }
});

和模板:

<template name="game">

{{#with theGame}}
  {{#each theGame.questions}}
    {{teema}}
  {{/each}}
{{/with}}
</template>

但它不起作用,模板有什么问题?

3 个答案:

答案 0 :(得分:0)

theGame.questions是一个包含teema键的对象数组的数组(您可以迭代)。因此,您仍需要迭代二级数组,或者在最终到达具有teema属性的对象之前定义该数组中的特定项。

可能是这样的:

{{#with theGame}}
  {{#each questions}}
    {{#each this}}
      {{this.teema}}
    {{/each}}
  {{/each}}
{{/with}}

但这取决于你为什么首先拥有这些2级数组。

答案 1 :(得分:0)

{{teema}}应该是什么?

无论如何,正如您从console.log语句中看到的那样,{{theGame.questions}}会返回另一个数组。但该数组返回对象。使用Blaze真的很难查询。

更好的解决方案是将其展平,以便您的数据形状如下:

questions: [
   {
       a: 'asdfkjah',
       level: 'askdjfhal',
       q: 'asdkfh',
       teema: 'asdkfjh'
       vaartus: 100
   },
   {
      ...
   }
]

这样,您就没有嵌套在数组中的数组。这将允许你:

{{#with theGame}}
  {{#each theGame.questions}}
    {{this.teema}}
  {{/each}}
{{/with}}

答案 2 :(得分:0)

'#each theGame.questions'在#with中不起作用,因为你可以直接访问'theGame'对象。

关键是当你试图在#with中获取theGame对象时,它将返回undefined,因为'theGame'对象没有thegame属性,你要在#with块中访问它。

<template name="game">
  {{#with theGame}}
    {{#each questions}}
       //Thie #each because you have nested array. As I can see in your console log.
       {{#each this}}
         {{teema}}
       {{/each}}
    {{/each}}
  {{/with}}
</template>