onCreated 中的 Meteor Blaze 模板数据上下文

Meteor Blaze Templates Data Context in onCreated

我在几个地方读到我应该能够使用 Template.currentData();

获取当前模板的数据上下文

我发现它似乎只能在自动运行中工作。但是在将数据作为变量记录在那里之后,首先它记录 null 然后 它在控制台中记录数据。

当我尝试使用数据时,例如尝试将 data._id 传递到订阅中,我在控制台中收到 TypeError。 TypeError: Cannot read property '_id' of null。所以出于某种原因,数据为空,我正在努力找出原因。

我使用 Iron Router 在我的路线中设置了数据上下文:

Router.route('/stock/:stockNumber', {
   name: 'stock.detail',
   template: 'StockDetail',
   data: function () {
      return Stock.findOne({
         stockNumber: this.params.stockNumber*1
      });
   }
});

我想做的是获取对数据上下文的访问权限,以便我可以将其中的一些内容(例如“_id”)传递给其他一些订阅。我做错了什么?

模板在其他方面按预期正确显示了页面上的数据,我 可以 使用空格键来显示 {{_id}} 之类的内容。但同样,我似乎无法访问 Template.StockDetail.onCreated

中的数据上下文

好的,这就是我最后做的...

显然数据上下文在 onCreated 中根本不可用,period。我必须做的是在自动运行中执行 Collection.findOne() 以找到 stockItem 并将结果设置为变量,然后使用 stockItem._id 作为新订阅中的参数 IF 项目被找到。有了这两件事,它似乎工作得很好。

Template.StockDetail.onCreated(function () {
   let instance = this;

   instance.autorun(function () {
      instance.subscribe('stock_item', Router.current().params.stockNumber);

      let stockItem = Stock.findOne({ // This is what was needed for some reason...
         stockNumber: Router.current().params.stockNumber*1
      });

      if (stockItem) { // ...and, also, this was needed
         instance.subscribe('stock_item_scan_log', stockItem._id);
      }

   });
});

我只是不明白为什么我不能通过其他方式轻松获得 _id。这种方式感觉不对,我不喜欢。