簡體   English   中英

從其他.js文件中的1個.js源文件(jqTree)訪問變量以覆蓋方法

[英]Access variable from 1 .js source file (jqTree), from within different .js file, to override method

(是JS,jQuery和jqTree的新增功能)

我試圖覆蓋方法JqTreeWidget.prototype.openNode 從一個.js文件 () tree.jquery.js 在另一個 (我自己) custom.js )。

我已經閱讀了一般情況下重寫js方法的方法,我只需要重新定義它即可 因此,我嘗試在該方法上執行此操作,並且我認為自己 JqTreeWidget 訪問具有原始方法 JqTreeWidget 的變量 我認為挑戰在於原始方法位於tree.jquery.js (源代碼)中,該文件與我自己要執行覆蓋的其他custom.js文件分離。

該問題的目的是允許我在custom.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/LGoaQx上查看我的custom.js 。單獨的源tree.jquery.js被添加到該Codepen的JS設置中。

如何獲得(從我的custom.js文件中)對源文件( tree.jquery.js )中的JqTreeWidget變量的tree.jquery.js 可能嗎? JqTreeWidget不是在范圍之外tree.jquery.js ,或者是它不是一個全局變量? 我希望treeContainer.tree.prototype可以擁有它,但是到目前為止我還沒有運氣...

謝謝!

可以通過以下方式獲取原型對象:

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

請注意,這不是任何jQuery插件的通用解決方案。 這是由樹插件明確實現的東西。

我發現了這種變通方法。 但是由於這是一種黑客行為,所以我仍然更喜歡找到此問題中提出的答案(因此, 請繼續對我在Question中提到的<reference to JqTreeWidget.prototype.openNode>回答 ,謝謝)。 。

如本問題所述,該目標涉及使在custom.js從外部重寫JqTreeWidget.prototype.openNode (來自tree.jquery.js )成為custom.js 這樣,對changeAncestorHeightRecursively (我的代碼)和JqTreeWidget.prototype.openNode都將通過custom.js的覆蓋進行,而tree.jquery.js源代碼根本不會被修改。

解決方法:

  1. 在html中聲明全局變量

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

  2. custom.js將globar var設置為該函數 (我想在JqTreeWidget.prototype.openNode之前調用的JqTreeWidget.prototype.openNode ):

    window.changeAncestorHeightRecursively = changeAncestorHeightRecursively;

  3. JqTreeWidget.prototype.openNode的開頭調用全局變量引用的函數 (侵入tree.jquery.js ):

    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和修改tree.jquery.js源代碼,所以這很tree.jquery.js

這將立即生效,但希望此原始問題中所述的解決方案不那么笨拙……謝謝!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM