为什么 helper 在没有引用 #with-block 中的任何反应变量时重新运行?
Why does a helper rerun when not referenced to any reactive variables inside a #with-block?
为什么 #with
块中的助手 insideWith
在 foo
更改时会重新计算?助手没有引用任何反应式数据源!
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。
为什么 #with
块中的助手 insideWith
在 foo
更改时会重新计算?助手没有引用任何反应式数据源!
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。