1

(JS、jQuery 和 jqTree 的新手)

我正在尝试在另一个(我自己的)中覆盖一个 .js 文件tree.jquery.js)中的方法(JqTreeWidget.prototype.openNode)。custom.js

我读过它来覆盖一般的 js 方法,我只需要重新定义它。所以我试图在方法上做到这一点,我想我被困在访问具有原始方法( JqTreeWidget)的变量上。我认为挑战在于原始方法位于(源)中,它与我想要进行覆盖tree.jquery.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源代码。

看我的custom.jshttp://codepen.io/cellepo/pen/LGoaQxtree.jquery.js在该 codepen 的 JS 设置中从外部添加 单独的源。

如何(从我的custom.js文件中)访问JqTreeWidget源文件 ( ) 中的变量tree.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

我发现了这个 hacky 解决方法。但由于这是一个黑客,我仍然希望找到这个问题中提出的答案(所以请继续回答<reference to JqTreeWidget.prototype.openNode>我在问题中提到的答案,谢谢)......

如本问题所述,目标涉及使在外部覆盖JqTreeWidget.prototype.openNode(从)成为可能。因此,对(我的代码) &的调用都将通过覆盖 in 进行,并且根本不会修改源。tree.jquery.jscustom.jschangeAncestorHeightRecursivelyJqTreeWidget.prototype.openNodecustom.jstree.jquery.js

解决方法:

  1. 在 html 中声明全局变量

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

  2. custom.js中,将 globar 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源,这是 hacky。

这现在可以工作,但希望有一个不那么老套的解决方案,如这个原始问题中所述......谢谢!

于 2016-02-20T00:05:42.607 回答