Meteor 流星-如何说出什么';导致模板重新渲染的原因是什么?
我有一个Meteor模板,它在最初几秒钟内重播了约6次,使spinner(spin.js)结巴 我不知道为什么模板本身会重新排序,添加Meteor 流星-如何说出什么';导致模板重新渲染的原因是什么?,meteor,Meteor,我有一个Meteor模板,它在最初几秒钟内重播了约6次,使spinner(spin.js)结巴 我不知道为什么模板本身会重新排序,添加{{{{{isolate}}和/或{{{{constant}}标记没有帮助 我的问题:是否有一种程序化的方法来确定哪个事件或反应数据源触发给定的重新提交?因此,要确定哪个模板帮助程序无效,您有几个选项: 首先,只需编辑Meteorpackages/deps/deps.js的源代码,并向invalidate函数添加堆栈跟踪 您可以使用类似以下内容获取堆栈跟踪:try
{{{{{isolate}}
和/或{{{{constant}}
标记没有帮助
我的问题:是否有一种程序化的方法来确定哪个事件或反应数据源触发给定的重新提交?因此,要确定哪个模板帮助程序无效,您有几个选项:
packages/deps/deps.js的源代码,并向invalidate
函数添加堆栈跟踪
您可以使用类似以下内容获取堆栈跟踪:try{throw new Error(“”);}catch(ex){console.log(ex.stack);}
Deps.Computation.prototype.invalidate
,类似于(1)
隔离值
包的操作,但需要添加日志语句(并删除值隔离)
(免责声明:尚未完全测试此代码,但您可以了解大致情况)
并像这样包装你的可疑助手:
Template.myTemplate.helpers
myHelper: ()->
return logInvalidation 'myHelper invalidated!', ()->
return Session.get("myValue")
logInvalidation = (stmt, fn) ->
value = null
outerComputation = Deps.currentComputation
dep = new Deps.Dependency()
c = Deps.autorun (c) ->
# kill this computation if the computation wrapping the handler is stopped
if outerComputation?.stopped
c.stop()
return
unless c.firstRun
# a dependency from `fn` was changed (hence this computation was invalidated)
# so, invalidate anything that depends on `dep`
console.log("Helper invalidated #{stmt}")
dep.changed()
else
# attach dependencies in `fn`, and pass result to `value`
value = fn()
return
dep.depend()
return value
Template.myTemplate.helpers
myHelper: ()->
return logInvalidation 'myHelper invalidated!', ()->
return Session.get("myValue")