【问题标题】:JS How to check if a class variable changed? [closed]JS如何检查类变量是否改变? [关闭]
【发布时间】:2019-04-19 03:43:44
【问题描述】:

我的类中有一个可以随时更改的变量?有没有一种方法可以让 js 反应性地检查它是否发生了变化以及它是否确实执行了一个功能?我无法控制对象,我可以查看和修改它,但我的代码并不是唯一可以做到这一点的代码。

【问题讨论】:

  • 您可以管理此变量更改的方式,例如仅通过某个函数对此变量进行任何更改,您可以在其中更改值,并在其中进行任何其他检查或更改.
  • 我不管理变量,我可以查看它。
  • 嗯,一个成本高的解决方案是每隔很短的时间运行一个间隔,它会检查这个变量的值并根据变化采取行动。但不要这样做,除非对变量的更改很频繁。
  • @user10011538 我在下面为您提供了 Meteor 特定的答案。它是否帮助您解决了您的问题?如果没有,请提供更多详细信息,以便我们解决此问题。

标签: javascript meteor dom-events meteor-blaze


【解决方案1】:

如果您是该对象的所有者,您可以在其上使用Proxy 对象来代替原始对象。在这种情况下,您将完全控制您的对象生成的每个操作

【讨论】:

  • 对不起,我没有提到这个,我对对象没有绝对的控制权,我可以查看和修改它,但我的代码并不是唯一可以做到这一点的代码。
【解决方案2】:

在 Meteor(您已对其进行标记)中,您有 Tracker,如果响应式数据源已更改,无论由谁或什么人更改,它都会自动运行一个函数。

阅读:https://docs.meteor.com/api/tracker.html

现在在 Blaze(您也已标记)中,您还有一个模板内部跟踪器:

Template.myTemplate.onCreated(function (){
  const instance = this

  instance.autorun(() => {
    // this behaves like Tracker.autorun
  })
})

如何使变量反应?

如果您在自动运行中访问反应变量,则会触发给定函数。一个普通的 Object 不是反应式的。在 Meteor 中,您可以使用

存储数据

ReactiveVar:https://docs.meteor.com/api/reactive-var.html

ReactiveDict:https://atmospherejs.com/meteor/reactive-dict

(迷你)mongo 光标:https://docs.meteor.com/api/collections.html#mongo_cursor

从这些数据存储中访问数据会触发跟踪器的计算。

阅读这些文档应该可以清楚地理解 Meteor 的反应式概念,并且您应该能够编写反应式模板。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-25
    • 2011-03-26
    • 2021-10-28
    • 2013-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多