从1 .js源文件(jqTree)中访问变量,从不同的.js文件中覆盖方法

时间:2016-02-19 20:04:16

标签: javascript jquery jqtree

(JS,jQuery和& jqTree的新手)

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

我已经读过to override a js method in general, I just need to redefine it。所以我试图在方法上做到这一点,并且 我认为我无法访问具有原始方法的变量 JqTreeWidget。我认为挑战在于原始方法位于tree.jquery.js(源代码)中,与我自己的其他custom.js文件分开,我想要覆盖它。

本课题的目的是允许我在custom.js中写something like this<reference to JqTreeWidget.prototype.openNode> 将是此问题的答案):< / p>

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)中访问(从我的JqTreeWidget文件中)到tree.jquery.js变量?是否均匀可能? JqTreeWidget不在tree.jquery.js之外的范围内,还是不是全局变量?我希望treeContainer.tree.prototype能拥有它,但到目前为止我还没有运气......

谢谢!

2 个答案:

答案 0 :(得分:1)

原型对象可以通过以下方式获得:

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

请注意,这不是任何jQuery插件的通用解决方案。这是树插件明确实现的。

答案 1 :(得分:0)

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

如本问题所述,目标涉及可以在JqTreeWidget.prototype.openNode外部覆盖tree.jquery.js(来自custom.js)。因此,拨打changeAncestorHeightRecursively(我的代码)&amp; JqTreeWidget.prototype.openNode将来自custom.js中的覆盖,而tree.jquery.js来源根本不会被修改。

解决方法:

  1. os.path.join

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

  2. custom.js中,将globar var设置为函数(我想在JqTreeWidget.prototype.openNode之前调用的那个):

    window.changeAncestorHeightRecursively = changeAncestorHeightRecursively;

  3. JqTreeWidget.prototype.openNode 的开头调用global-var-referenced函数(入侵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... }

  4. 这会在tree.jquery.js内调用我的代码函数,而不是在custom.js内调用重写的方法。 所以这是hacky因为全局变量,以及修改tree.jquery.js来源。

    这将暂时有效,但希望这个原始问题中所述的解决方案不那么糟糕......谢谢!