我正在几个地方读书,我应该可以使用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中的数据上下文
答案 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。这种方式感觉不正确,我不喜欢它。