onCreated

时间:2018-03-17 19:07:42

标签: iron-router meteor-blaze

我正在几个地方读书,我应该可以使用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'进入其他一些订阅。我做错了什么?

模板正如预期正确显示页面上的数据,我可以使用Spacebars来显示{{_id}}之类的内容。但同样,我似乎无法访问Template.StockDetail.onCreated中的数据上下文

1 个答案:

答案 0 :(得分:0)

好的,所以这就是我最终做的......

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

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。这种方式感觉不正确,我不喜欢它。