Meteor 流星-如何说出什么';导致模板重新渲染的原因是什么?

Meteor 流星-如何说出什么';导致模板重新渲染的原因是什么?,meteor,Meteor,我有一个Meteor模板,它在最初几秒钟内重播了约6次,使spinner(spin.js)结巴 我不知道为什么模板本身会重新排序,添加{{{{{isolate}}和/或{{{{constant}}标记没有帮助 我的问题:是否有一种程序化的方法来确定哪个事件或反应数据源触发给定的重新提交?因此,要确定哪个模板帮助程序无效,您有几个选项: 首先,只需编辑Meteorpackages/deps/deps.js的源代码,并向invalidate函数添加堆栈跟踪 您可以使用类似以下内容获取堆栈跟踪:try

我有一个Meteor模板,它在最初几秒钟内重播了约6次,使spinner(spin.js)结巴

我不知道为什么模板本身会重新排序,添加
{{{{{isolate}}
和/或
{{{{constant}}
标记没有帮助


我的问题:是否有一种程序化的方法来确定哪个事件或反应数据源触发给定的重新提交?

因此,要确定哪个模板帮助程序无效,您有几个选项:

  • 首先,只需编辑Meteor
    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")