模板助手显然可以提供被动数据,但Collection变换不会重新运行变更。那么是否可以触发完整的路线重新渲染?或完整的模板重新渲染?
这里是帮助者,我希望完全刷新变换:
Template.productEdit.helpers({
'locationsInventory': function(_productId) {
return Inventory.find({productId: _productId}, {transform: function(doc) {
doc.name = Locations.findOne(doc.locationId).name;
return doc; // Transform is Non-reactive
}
}
);
}
});
你可以看到我正在加入一个名字'从另一个集合到带有转换的doc。但是当然这是非反应性的,所以如果可以完全重新触发路线渲染,如果“地点”和“#39;收藏改变了?
答案 0 :(得分:1)
也许使用Tracker.autorun
Template.productEdit.helpers({
'locationsInventory': function(_productId) {
Tracker.autorun(function(){
return Inventory.find({productId: _productId}, {transform: function(doc) {
doc.name = Locations.findOne(doc.locationId).name;
return doc; // Transform is Non-reactive
}
})
}
);
}
});
Template.productEdit.helpers({
'locationsInventory': function(_productId) {
return Inventory.find({productId: _productId}, {transform: function(doc) {
var query = Locations.findOne(doc.locationId).name;
query.find().observeChanges({
added: function(id, doc) {
return doc;
}
});
}
}
);
}
});
答案 1 :(得分:1)
我会做这样的事情(未经测试):
Template.productEdit.helpers({
'locationsInventory': function(_productId) {
inventory = Inventory.find({productId: _productId}).map(function(doc) {
docs = Locations.find(doc.locationId).fetch()
return docs[0].name
});
}
});
我使用fetch()
因为它是被动的(而findOne()
不是)。 map()
也是反应性的,所以如果要么改变,依赖关系将重新运行。
答案 2 :(得分:1)
您可以在帮助程序中包含其他集合。它可能看起来没有做任何事情,但如果其中的任何内容发生变化,它应该使助手重新运行。
Template.productEdit.helpers({
'locationsInventory': function(_productId) {
// Add this
Locations.findOne();
return Inventory.find({productId: _productId}, {transform: function(doc) {
doc.name = Locations.findOne(doc.locationId).name;
return doc; // Transform is Non-reactive
}
});
}
});