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。这种方式感觉不对,我不喜欢。
我在几个地方读到我应该能够使用 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。这种方式感觉不对,我不喜欢。