在Meteor中,如何在模板数据上下文的子部分上设置被动依赖关系?
考虑以下代码:在Meteor中,如何在模板数据上下文的子部分上设置被动依赖关系?,meteor,Meteor,考虑以下代码: Template.fullDoc.rendered = function() { // Get triggered whenever the selected document id changes this.autorun(function() { var docId = isolateValue(function() { return Template.currentData().selectedDoc._id;
Template.fullDoc.rendered = function() {
// Get triggered whenever the selected document id changes
this.autorun(function() {
var docId = isolateValue(function() {
return Template.currentData().selectedDoc._id;
});
...
});
}
此代码不起作用。在isolateValue()
内部,Template.currentData()
有时会触发异常:来自跟踪器的异常重新计算函数:错误:没有当前视图
(这对应于Template.instance()
返回null
)
那么,如何在模板数据上下文的子部分上设置被动依赖关系呢?您可以以一种不会导致
template.instance()
有时设置为null
的方式重新创建isolateValue
行为
$ meteor add reactive-var
Template.fullDoc.rendered=函数(){
var docIdVar=new ReactiveVar();
这是一个自动运行(函数(){
docIdVar.set(Template.currentData().selectedDoc.\u id);
});
这是一个自动运行(函数(){
var docId=docIdVar.get();
// ...
});
}
这利用了一个事实,即将
ReactiveVar
设置为它已经具有的相同值不会触发无效。(默认情况下,这仅适用于基本体;对于对象,在构造ReactiveVar
时,您需要传递一个自定义的equalsFunc
。如果\u id
是字符串,则可以。如果它是ObjectID
则可能不是。)什么是IsolatValue
?IsolatValue()是来自此包的函数:该包是旧的。Meteor已进化,不再重新发布整个模板。为什么要使用IsolatValue函数?你用的是哪个版本的流星?我用的是最新的流星版本。我严重依赖isolateValue来优化反应性能。但它似乎不能正确处理Template.xxxx(),因此我将不得不使用下面的解决方案。不过,我更希望isolateValue是固定的,因为它允许更简洁和自我解释的代码。我将在他们的回购协议中发布一个问题。谢谢。它确实有效。您知道isolateValue()中的错误吗?我发现它明显不那么冗长…isolateValue
在常规的Tracker.autorun
中调用您的函数(当时它被称为Deps.autorun
),而不是templateInstance.autorun
。与所有异步回调一样,Template.instance
的值通常在自动运行中丢失templateInstance.autorun
不遗余力地保存它。谢谢你,伙计!你救了我很多研究!