1

(JS、jQuery、jqTree の新機能)

ある .js ファイル( tree.jquery.js )のメソッド( JqTreeWidget.prototype.openNode)を別の(自分の) ファイルでオーバーライドしようとしていますcustom.js

一般的にjsメソッドをオーバーライドするには、それを再定義する必要があることを読みました。したがって、メソッドでそれを実行しようとしていますが、元のメソッド( )を持つ変数へのアクセスに固執していると思います。課題は、元のメソッドが(ソース)にあり、オーバーライドを実行したい自分の他のファイルとは別であることだと思います。JqTreeWidgettree.jquery.jscustom.js

この質問の目標は、私の中にこのようなものを書くことができるようにすることです(このcustom.js質問<reference to JqTreeWidget.prototype.openNode> への回答になります):

var originalMethod = <reference to JqTreeWidget.prototype.openNode>;

// Override of originalMethod
<reference to JqTreeWidget.prototype.openNode> = function( node, slide ){
    // my code I want to happen 1st here
    changeAncestorHeightRecursively( node, true);

    // my code is done, and now I'm ready to call the original method
    originalMethod.call( this, node, slide );
}

tree.jquery.js実際にソースにハッキングすることなく、オーバーライドを行う最も非侵入的な方法だと思います。

http://codepen.io/cellepo/pen/LGoaQxcustom.jsで私を参照してください 別のソースtree.jquery.jsは、その codepen の JS 設定で外部から追加されます。

ソース ファイル ( ) 内の変数に(自分のcustom.jsファイル内から) アクセスするにはどうすればよいですか? JqTreeWidgettree.jquery.js それは可能ですか?JqTreeWidgetの外側のスコープにありませtree.jquery.jsんか、それともグローバル変数ではありませんか? 私はそれを望んtreeContainer.tree.prototypeでいましたが、今のところ運がありません...

ありがとう!

4

2 に答える 2

1

プロトタイプ オブジェクトは、次の方法で取得できます。

jQuery.fn.tree("get_widget_class").prototype

これは、jQuery プラグインの一般化されたソリューションではないことに注意してください。これは、ツリー プラグインによって明示的に実装されているものです。

于 2016-02-19T23:12:52.850 に答える
0

このハッキーな回避策を見つけました。しかし、それはハックであるため、この質問で提起された回答を見つけることを希望します(質問で言及したことに関して回答を続けてください<reference to JqTreeWidget.prototype.openNode>、ありがとう)...

この質問で述べたように、目標は で外部JqTreeWidget.prototype.openNodeから (から) オーバーライドできるようにすることです。そのため、(私のコード) &への呼び出しは両方とも のオーバーライドから行われ、ソースはまったく変更されません。tree.jquery.jscustom.jschangeAncestorHeightRecursivelyJqTreeWidget.prototype.openNodecustom.jstree.jquery.js

回避策:

  1. html でグローバル変数を宣言します

    <script type='text/javascript' language="javascript"> changeAncestorHeightRecursively = 1; </script>

  2. custom.jsglobar var を関数(前に呼び出したい関数) に設定しますJqTreeWidget.prototype.openNode

    window.changeAncestorHeightRecursively = changeAncestorHeightRecursively;

  3. JqTreeWidget.prototype.openNode(hack into tree.jquery.js)の先頭で global-var-referenced 関数を呼び出します。

    JqTreeWidget.prototype.openNode = function(node, slide) { // Only way I could figure out to get this to execute before the rest of this method // (global-var-referenced function in custom.js) changeAncestorHeightRecursively( node, true ); // Rest of original openNode code... }

tree.jquery.jsこれは、オーバーライドされたメソッドを 内から呼び出すのではなく、内からコード関数を呼び出しますcustom.js したがって、これはグローバル変数とソースの変更のためにハッキーです。tree.jquery.js

これは今のところ機能しますが、この元の質問に記載されているように、ハックの少ないソリューションを望んでいます...ありがとう!

于 2016-02-20T00:05:42.607 に答える