【问题标题】:Meteor Blaze Templates Data Context in onCreatedonCreated 中的 Meteor Blaze 模板数据上下文
【发布时间】:2018-08-26 16:57:21
【问题描述】:

我在几个地方阅读,我应该能够使用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 中的数据上下文

【问题讨论】:

    标签: iron-router meteor-blaze


    【解决方案1】:

    好的,这就是我最终要做的......

    显然,数据上下文在 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。这种方式只是感觉不正确,我不喜欢它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-02
      • 1970-01-01
      • 2016-04-02
      • 2017-08-20
      • 2018-11-05
      • 1970-01-01
      • 1970-01-01
      • 2016-03-24
      相关资源
      最近更新 更多