从不同的 .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
).
我读过 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>
将是这个问题的答案):
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
在该代码笔的 JS 设置中外部添加了单独的源 tree.jquery.js
。
如何(从我的 custom.js
文件中)访问源文件 (tree.jquery.js
) 中的 JqTreeWidget
变量? 有可能吗? JqTreeWidget
是否不在 tree.jquery.js
之外的范围内,或者它不是全局变量?我希望 treeContainer.tree.prototype
能得到它,但到目前为止我还没有运气......
谢谢!
原型对象获取途径:
jQuery.fn.tree("get_widget_class").prototype
请注意,这不是任何 jQuery 插件的通用解决方案。这是树插件明确实现的东西。
我发现了这个棘手的解决方法。但由于这是一个 hack,我仍然更愿意找到这个问题中提出的答案(所以 请继续回答我在问题 [=63= 中提到的 <reference to JqTreeWidget.prototype.openNode>
], 谢谢)...
如本问题所述,目标涉及在 custom.js
中从外部覆盖 JqTreeWidget.prototype.openNode
(来自 tree.jquery.js
)。因此,对 changeAncestorHeightRecursively
(我的代码)和 JqTreeWidget.prototype.openNode
的调用都将由 custom.js
中的覆盖进行,并且 tree.jquery.js
源根本不会被修改。
解决方法:
Declare global var in html:
<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函数(hack into 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
. 中调用覆盖的方法所以这个由于全局 var 和修改 tree.jquery.js
source.
是 hacky
这暂时可行,但希望能有一个不那么棘手的解决方案,如这个原始问题中所述...谢谢!
(JS 新手,jQuery,& jqTree)
我正在尝试覆盖一个方法 (JqTreeWidget.prototype.openNode
) 来自一个 .js 文件 (tree.jquery.js ) 另一个 (我自己的 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>
将是这个问题的答案):
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
在该代码笔的 JS 设置中外部添加了单独的源 tree.jquery.js
。
如何(从我的 custom.js
文件中)访问源文件 (tree.jquery.js
) 中的 JqTreeWidget
变量? 有可能吗? JqTreeWidget
是否不在 tree.jquery.js
之外的范围内,或者它不是全局变量?我希望 treeContainer.tree.prototype
能得到它,但到目前为止我还没有运气......
谢谢!
原型对象获取途径:
jQuery.fn.tree("get_widget_class").prototype
请注意,这不是任何 jQuery 插件的通用解决方案。这是树插件明确实现的东西。
我发现了这个棘手的解决方法。但由于这是一个 hack,我仍然更愿意找到这个问题中提出的答案(所以 请继续回答我在问题 [=63= 中提到的 <reference to JqTreeWidget.prototype.openNode>
], 谢谢)...
如本问题所述,目标涉及在 custom.js
中从外部覆盖 JqTreeWidget.prototype.openNode
(来自 tree.jquery.js
)。因此,对 changeAncestorHeightRecursively
(我的代码)和 JqTreeWidget.prototype.openNode
的调用都将由 custom.js
中的覆盖进行,并且 tree.jquery.js
源根本不会被修改。
解决方法:
Declare global var in html:
<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函数(hack intotree.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
. 中调用覆盖的方法所以这个由于全局 var 和修改 tree.jquery.js
source.
这暂时可行,但希望能有一个不那么棘手的解决方案,如这个原始问题中所述...谢谢!