如何在Javascript中将函数绑定到对象的数据成员中的更改?

时间:2012-07-25 13:25:49

标签: javascript data-binding

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

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

我们尝试过的是

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

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

我对JavaScript或数据绑定不太熟悉,所以我不知道这是对还是错,或者对它是正确还是错误。如果有人可以在这个片段中指出要改变的内容,或者他们是否可以提出另一种方法来解决这个问题,我将非常感激。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

由于这是Firefox,您可以使用它提供的mutation events。但请注意该页面上的警告:

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

如果您能够将自己限制在Firefox 14及更高版本,则可以使用新的mutation observers stuff代替。

答案 2 :(得分:0)

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

Listening for variable changes in JavaScript or jQuery

jQuery trigger on variable change

Javascript Track Variable Change

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

一切顺利