调试应用程序后,我偶然发现了以前从未发现过的东西。 举一个简单的例子,我有一个简单的链接,其中包含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会做出此设计决定?

===============>>#1 票数:2

使用Iron-Router,观察您所描述的行为是正常的。

一旦主要计算依赖项发生更改,将立即刷新当前使用的模板。 调用Session.set将调用模板变量的刷新。 当然,这很多,但这是确保模板始终保持最新状态的最简单方法之一。

如果您正在寻找更大的应用程序,可以看看React.js集成,这将使您能够仅刷新模板上的良好变量。

实际上,在您的示例中,tabHasError的值不应更改,但是模板的重新呈现将调用tabHasError函数以检查是否有任何更改。 在这种情况下,不会。

如果行为不够清楚,我就在附近。 祝您周日愉快!

===============>>#2 票数:1

我注意到这仅发生在元素的属性中。 根据有关以前的UI引擎(Shark)的Event Minded视频,我认为这种行为非常明确:它只会重新渲染受影响的DOM元素。

考虑到Blaze在您的代码中正在重新渲染DOM元素,因此使与之相关的先前计算无效是有意义的。 如果您将此帮助程序放置在a元素内,它将不会失效。

  ask by Matt K translate from so

未解决问题?本站智能推荐:

2回复

阻止反应性助手更新流星模板

我正在研究如何在模板帮助器功能中关闭反应性。 我只希望在最初填充模板时呈现数据,而不希望在基础数据更改时呈现数据。 我当前的助手有两个反应变量:一个是Session.get(),另一个是Collection .findOne()。 我试图将Session.get()包装在Tracker
2回复

流星:为什么我的模板助手没有反应性?

我想获取路径以便为活动选项卡设置活动类。 如果我每次单击“刷新”,该代码均有效。 这是我的代码: JS HTML 完整回购 https://github.com/mvaisanen/flashcards
2回复

如何使流星助手不反应?

我想让这段代码无反应。 有办法吗? 我知道有一种方法,当你是Foo.find({}, {reactive:false}) 我想知道是否有相同的东西。
1回复

流星模板助手反应性不一致

我有一个模板助手,用于显示带有反应式var schoolFindQuery的学校 并且schoolFindQuery反应变量随按钮单击而变化,随按钮单击而被更新,并且ui也相应地变化。 奇怪的是,当订阅返回数据时没有问题,但是只要订阅返回任何数据,此后辅助程序代码就不会随着订阅更改而重
1回复

模板助手中的流星反应问题

我目前有一个模板,可以在其中使用以下查询来查询数据库。 现在,很明显,只要有新的东西进入或从这组数据中删除,模板助手就会重新运行,这正是我想要的。 当system_message的时间超过2分钟并且我不再希望通过我的查询发送该消息时,就会出现问题。 发生这种情况时,数据不会更新,只会
1回复

流星:使用Tracker.Dependency的反应性助手

我有一个帮手 使用SongManager中的getSongId方法的方法 但这不会导致模板在调用setSongId时进行被动更新。 我做错什么了吗? 如果我使用Session.get和Session.set,则一切正常。
1回复

流星助手使用基于反应变量的查询

我正在尝试使用一个帮助程序,该帮助程序应使用templates:array的反应数组返回一个集合,该集合使用$in指定整个集合的子集。 我有 在某些情况下,我更改了数组的内容,类似于 (或者我应该使用.set()吗?) 我的助手是 但是然后我在meteor.j
1回复

流星:如何使助手功能起反应?

每当此集合更新时,我都试图找一个助手来重新运行并返回更新的集合。 例如: 当我通过服务器端的Meteor.call将数据添加到图像时,我的集合会在客户端本地更新,但是助手功能不会重新运行,图像也不会更新..... 任何想法我需要怎么做才能将来自助手对象的return集合放入反
2回复

流星中的非反应性和反应性数据(相同的助手)

我有一个视图,显示一些由用户发布的带有一些数据的图片(让我们查看图像Instagram)。 我已经将这些图片作为非反应性数据(否则您会看到很多更新),但是这些图片有一个按钮可以使图片喜欢。 如果我将其作为非反应性数据,当我单击“喜欢”填充的心脏时,我看不到(我需要刷新)。 这是我的
1回复

流星助手不活跃

我有以下帮手: 它应该返回目标的名字和姓氏,但是问题是我应该刷新页面才能显示它们。 那就是发布功能