Meteor - 如何判断是什么导致模板重新呈现?

标签 meteor

我有一个 Meteor 模板,它在最初几秒内重新渲染大约 6 次,使微调器 (spin.js) 卡顿。

我不知道为什么模板本身会重新渲染,而添加 {{#isolate}} 和/或 {{#constant}} 标签不是帮助。

我的问题:是否有一种编程方式来确定触发给定重新渲染的事件或 react 数据源?

最佳答案

因此,要找出哪个模板助手正在失效,您有几个选择:

  1. 首先是编辑 Meteor packages/deps/deps.js 的源代码,然后将堆栈跟踪添加到 invalidate 函数。

    您可以使用类似try{throw new Error('');}catch(ex){ console.log(ex.stack);

    /li>
  2. Proxy Deps.Computation.prototype.invalidate,类似于(1)

    var oldInvalidate = Deps.Computation.prototype.invalidate;
    Deps.Computation.prototype.invalidate = function(){
      try{throw new Error('');}catch(ex){ console.log(ex.stack);}
      return oldInvalidate.apply(this,arguments);
    }
    
  3. 创建一个响应式函数包装器,它在无效时打印一条日志消息

    您可以执行类似于 isolate-value 包的操作 - 但添加一个日志记录语句(并删除值隔离)

    (免责声明:尚未完全测试此代码,但您可以了解大概的想法)

      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")
    

关于Meteor - 如何判断是什么导致模板重新呈现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21616254/

相关文章:

ssl - 如何将 spideable 与托管在 modulus.io 上的 meteor 应用程序一起使用

javascript - MeteorJS -- 内部服务器错误 [500] -- 无数据

javascript - 为什么当包有 api.use ('mongo' 时,在包测试中使用 Mongo 会失败?

css - 基于模板值动态设置 CSS 属性

javascript - 如何更改 meteor 中的重置密码 URL?

javascript - meteor +物质化: collapsable in for each doesn't work

arrays - 如何将 $not 逻辑查询运算符与其他比较查询运算符结合使用以获得更具体的 yield ?

javascript - 从模板助手meteor/mongodb访问minimongo

collections - 为什么 Meteor 提示集合的插入方法已经定义?

meteor - 我可以跨子域使用单个 Meteor 登录吗?