调试应用&我偶然发现了一些我从未注意过的事情。举一个简单的例子,我有一个简单的链接,有2个帮助器来设置样式,如下所示:
<a class="{{tabHasError}} {{activeTab}}">Test</a>
进入此目的的助手如下:
tabHasError: function() {
console.log('invalidated!');
}
activeTab: function() {
if (Session.equals('activeTab', this.tabIdx)) return 'active';
}
现在,每次Session
var更改时,activeTab
都会失效,这是预期的。不期望的是tabHasError
也是无效的。为什么会这样?这是正常的吗?是因为它们都附属于同一个元素吗?除了合并功能,还有什么方法可以避免这种情况?或者甚至更好,为什么MDG做出这个设计决定?
答案 0 :(得分:2)
使用铁制路由器,观察您描述的行为是正常的。
当主计算依赖项发生变化时,将使用当前正在刷新的模板。调用Session.set将调用模板变量的刷新。当然,它很多,但它是确保模板始终是最新的最简单的方法之一。
如果您正在寻找更大的应用程序,您可以查看React.js集成,这将使您能够仅刷新模板上的好变量。
实际上,在您的示例中,tabHasError的值不应更改,但重新呈现模板将调用函数tabHasError来检查是否有任何更改。在这种情况下,没有。
如果行为不够明确,我就在附近。有一个巨大的星期天!
答案 1 :(得分:1)
我注意到这只发生在元素的属性中。根据关于之前的UI引擎(Shark)的Event Minded视频,我认为这种行为是非常明确的:它只会重新呈现受影响的DOM元素。
考虑到你的代码Blaze正在重新渲染DOM元素,使与之相关的先前计算无效是有意义的。如果您将此帮助程序放在a
元素内,则不会失效。