我在哪里可以存储JSON文档,以便可以多次从模板助手访问它?

时间:2017-04-30 17:52:54

标签: meteor meteor-blaze

在我的代码中,我正在尝试访问存储书籍信息的集合。我循环遍历一个只存储每本书ID的数组。然后我使用该ID从名为Books的集合中查询该书,该集合存储每本书的完整信息

Template.myBorrows.helpers({
  storeInSession:function(ilendbooksId) {
    console.log("storeInSession is called");
    var currentBorrowBook = Books.findOne({_id: ilendbooksId});
    Session.setAuth('currentBorrowBook' , currentBorrowBook);
  },

  getAuthor: function() {
    var currentBorrowBook = Session.get('currentBorrowBook');
    return currentBorrowBook.ItemAttributes[0].Author[0];
  },
});

我正在通过Books集合中的书籍_id来查询书籍文档。然后我将它存储在一个会话中,然后调用适当的方法来获取信息。唯一的问题是我必须为一系列书籍执行此操作,因此每次会话中的上一个文档被覆盖并且我页面上的所有数据都会更改为最新的Session文档。如何以及在何处存储每本书的文档,并确保在不更新到最新的会话文档的情况下显示正确的信息?

1 个答案:

答案 0 :(得分:0)

要回答您的评论,您有一系列文档_id,并且您想要在模板中获取文档。

HTML:

<template name="myTemplate">
{{#each array}}
  {{#with doc}}
    Author: {{author}}
  {{/with}}
{{/each}}
</template>

JS:

Template.myTemplate.helpers({
  array(){ return theArrayOfIdsThatYouveDefined; },
  doc(){ return Books.findOne(this); }
});

{{#each array}}循环this内部将是数组的元素。 doc帮助器只需从Books集合中查找一本书并将其返回。现在在{{#with doc}}块内,数据上下文将成为一个图书对象。

不需要会话变量或方法调用。