我正在使用JavaScript开发一个项目,我们正在为我们办公室中使用的组织网站构建一个Greasemonkey插件。我们无法让我们的更改保持渲染,因为我们不能简单地将更改注入到现有的渲染函数中。
因此,我们需要找到渲染发生的每个事件,并在那里注入我们自己的渲染函数。但是,有一些事件我们可以看到发生,但我们无法挂钩。我想知道的是如何将函数绑定到对象的数据成员,以便在该成员更改时调用该函数。我们的一名团队成员似乎认为这是可能的,但他告诉我们使用的方法似乎并不奏效。
我们尝试过的是
window.Controller.bind("change:idBoardCurrent", OMGITWORKED);
其中idBoardCurrent
是window.Controller
的成员,而OMGITWORKED
是我们希望在更改window.Controller.idBoardCurrent
时调用的函数。
我对JavaScript或数据绑定不太熟悉,所以我不知道这是对还是错,或者对它是正确还是错误。如果有人可以在这个片段中指出要改变的内容,或者他们是否可以提出另一种方法来解决这个问题,我将非常感激。
答案 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)
编辑:根据上下文对象
更改代码答案 1 :(得分:1)
由于这是Firefox,您可以使用它提供的mutation events。但请注意该页面上的警告:
如果您能够将自己限制在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
对不起,我不明白这个话题。
一切顺利