2

私は、オフィスで使用している組織サイトに Greasemonkey プラグインを構築する JavaScript のプロジェクトに取り組んでいます。既存のレンダリング関数に変更を単純に挿入することはできないため、変更をレンダリングしたままにするのに問題があります。

その結果、レンダリングが発生するすべてのイベントを見つけて、そこに独自のレンダリング関数を挿入する必要があります。ただし、いくつかのイベントが発生していることは確認できますが、それらに接続することはできません。私が知りたいのは、関数をオブジェクトのデータ メンバーにバインドして、そのメンバーが変更されるたびに関数が呼び出されるようにする方法です。私たちのチーム メンバーの 1 人はそれが可能だと考えたようでしたが、彼が使用するように私たちに言った方法はうまくいかなかったようです。

私たちが試したのは、

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

whereidBoardCurrentは のメンバーでwindow.Controllerあり、が変更さOMGITWORKEDれたときに呼び出される関数です。window.Controller.idBoardCurrent

私は JavaScript やデータ バインディングにあまり詳しくないので、これが正しいか間違っているか、何が正しくて何が間違っているのかわかりません。誰かがこのスニペットで何を変更すべきかを指摘してくれたり、別の方法を提案してくれたりしたら、とても感謝しています。

4

3 に答える 3

2

Object.defineProperty を使用して、Objects プロパティのセッターとゲッターを定義できます。

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)

編集:コンテキストオブジェクトに従ってコードを変更しました

JSビン

于 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 に答える