2

我正在使用 JavaScript 开发一个项目,我们正在为我们在办公室使用的组织站点构建一个 Greasemonkey 插件。我们无法让我们的更改保持渲染,因为我们不能简单地将更改注入现有的渲染函数。

因此,我们需要找到渲染发生的每个事件,并在那里注入我们自己的渲染函数。但是,有些事件我们可以看到正在发生,但我们无法参与其中。我想知道的是如何将函数绑定到对象的数据成员,以便在该成员更改时调用该函数。我们的一位团队成员似乎认为这是可能的,但他告诉我们使用的方法似乎不起作用。

我们尝试的是类似的东西

window.Controller.bind("change:idBoardCurrent", OMGITWORKED);

whereidBoardCurrent是其中的成员,window.Controller并且OMGITWORKED是我们希望在window.Controller.idBoardCurrent更改时调用的函数。

我对 JavaScript 或数据绑定不是很熟悉,所以我不知道这是对还是错,也不知道它是对还是错。如果有人可以指出此代码段中要更改的内容,或者他们可以提出另一种解决方法,我将不胜感激。

4

3 回答 3

2

您可以使用 Object.defineProperty 为 Objects 属性定义 setter 和 getter

Object.defineProperty(window.Controller,"idBoardCurrent",{
      get : function() { return this.val; },
      set : function(value) {this.val = value;OMGITWORKED(value); }
});
function OMGITWORKED(param) {
  console.log("idBoardCurrent has been Changed to " + param);
}

window.Controller.idBoardCurrent = "Test";
window.Controller.idBoardCurrent = "Test2";
console.log(window.Controller.idBoardCurrent)

编辑:根据上下文对象更改代码

JSBin

于 2012-07-25T13:36:15.713 回答
1

由于这是专门针对 Firefox 的,因此您可以使用它提供的突变事件。但请注意该页面上的警告:

  • 他们的 W3C 规范从未被广泛实施,现在已被弃用
  • 使用 DOM 突变事件“显着降低”DOM 修改的性能

如果您能够将自己限制在 Firefox 14 及更高版本,则可以改用新的变异观察者的东西

于 2012-07-25T13:32:02.797 回答
0

这是,当我没有完全错的时候,更多的是 javascript 的问题。我找到了有关该主题的一些信息

监听 JavaScript 或 jQuery 中的变量变化

jQuery触发变量更改

Javascript 跟踪变量变化

对不起,当我不明白这个话题时。

祝一切顺利

于 2012-07-25T13:41:41.320 回答