为什么 helper 在没有引用 #with-block 中的任何反应变量时重新运行?

Why does a helper rerun when not referenced to any reactive variables inside a #with-block?

为什么 #with 块中的助手 insideWithfoo 更改时会重新计算?助手没有引用任何反应式数据源!

foo.js

var foo;

if (Meteor.isClient) {
  foo = new ReactiveVar();
  foo.set(0);
  Template.board.helpers({
    obj: function() {
      return {
        foo: foo.get()
      };
    },
    insideWith: function() {
      return console.log('insideWith');
    },
    fooInsideWith: function() {
      foo.get();
      return console.log("fooInsideWith ");
    },
    notInsideWith: function() {
      return console.log('notInsideWith');
    },
    fooNotInsideWith: function() {
      foo.get();
      return console.log("fooNotInsideWith ");
    }
  });
  Template.board.events({
    'click button': function(e, t) {
      return foo.set(Math.floor(Math.random() * 10));
    }
  });
}

foo.html

<body>
    {{> bar}}
</body>

<template name="bar">
    <div class="bar">
        <button>Random</button>
        <div>
            {{#with obj}}
                {{insideWith}}
                {{fooInsideWith}}
            {{/with}}
        </div>

        <div>
            <span>{{obj.foo}}</span>
            {{notInsideWith}}
            {{fooNotInsideWith}}
        </div>
    </div>
</template>

来自评论 (@fuzzybabybunny):

{{#with}} 将在 obj 更改时自动 运行 因为 obj 是响应式数据源 foo 的助手。 {{insideWith}} 嵌套在 {{#with}} 中,所以显然它也是 运行s。