(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
能拥有它,但到目前为止我还没有运气......
谢谢!
答案 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
来源根本不会被修改。
解决方法:强>
<script type='text/javascript' language="javascript">
changeAncestorHeightRecursively = 1;
</script>
在custom.js
中,将globar var设置为函数(我想在JqTreeWidget.prototype.openNode
之前调用的那个):
window.changeAncestorHeightRecursively = changeAncestorHeightRecursively;
在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...
}
这会在tree.jquery.js
内调用我的代码函数,而不是在custom.js
内调用重写的方法。 所以这是hacky因为全局变量,以及修改tree.jquery.js
来源。
这将暂时有效,但希望这个原始问题中所述的解决方案不那么糟糕......谢谢!