从不同的.js文件中访问 1 个.js源文件 (jqTree) 中的变量以覆盖方法
Access variable from 1 .js source file (jqTree), from within different .js file, to override method
(新增JS、jQuery和jqTree)
我正在尝试覆盖另一个(我自己的custom.js
)中的一个.js文件(tree.jquery.js)中的方法(JqTreeWidget.prototype.openNode
)。
我已经读过要覆盖 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
源。
在 http://codepen.io/cellepo/pen/LGoaQx 查看我的custom.js
单独的源tree.jquery.js
添加到该代码笔的 JS 设置中。
如何访问(从我的custom.js
文件中)源文件(tree.jquery.js
)中的JqTreeWidget
变量? 甚至可能吗? JqTreeWidget
不在tree.jquery.js
之外的范围内,还是不是全局变量? 我希望treeContainer.tree.prototype
能拥有它,但到目前为止我还没有运气......
谢谢!
原型对象可以通过以下方式获得:
jQuery.fn.tree("get_widget_class").prototype
请注意,这不是任何jQuery插件的通用解决方案。这是树插件显式实现的东西。
我发现了这个笨拙的解决方法。 但是由于这是一个黑客,我仍然希望找到这个问题中提出的答案(所以请继续回答我在问题中提到的<reference to JqTreeWidget.prototype.openNode>
,谢谢)......
如本问题所述,目标涉及使JqTreeWidget.prototype.openNode
(从tree.jquery.js
)在custom.js
外部覆盖成为可能。 因此,对changeAncestorHeightRecursively
(我的代码)和JqTreeWidget.prototype.openNode
的调用都将从custom.js
中的覆盖进行,并且tree.jquery.js
源代码根本没有被修改。
解决方法:
-
在 html 中声明全局变量:
<script type='text/javascript' language="javascript"> changeAncestorHeightRecursively = 1; </script>
-
在
custom.js
中,将 globar var 设置为函数(我想在JqTreeWidget.prototype.openNode
之前调用的函数):window.changeAncestorHeightRecursively = changeAncestorHeightRecursively;
-
在
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
源。
这暂时有效,但希望有一个不那么笨拙的解决方案,如这个原始问题中所述...... 谢谢!
- 可以't让我的if语句处理js中的html表单输入
- 使用agility.js进行页面布局和合成
- 使用Clipboard.js复制span文本
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 强制模板刷新ember.js
- 如何编写HTML输入的JS内联
- Angular JS IE9 Hashbang url rewriting
- 使用JS将数组转换为json对象
- Node.js v6.2.0类扩展不是函数错误
- 当js函数's已执行
- 要求未定义JS回调参数
- 在自定义mean.io包中使用angular-chart.js作为依赖项
- 无法在数据endVal中设置值=“”;{{ucount}}”;使用Angular JS的CountUp
- 如何从Java/scala调用js美化程序
- 如何更改<svg>标记为<img>用js标记
- 如何使用 node.js 比较两个 json 数组
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- Selectize.js:如何对整数值的选项进行排序
- 从不同的.js文件中访问 1 个.js源文件 (jqTree) 中的变量以覆盖方法