Javascript 从不同的.js文件中访问1.js源文件(jqTree)中的变量以重写方法
(JS、jQuery和jqTree新增) 我正在尝试覆盖一个方法(Javascript 从不同的.js文件中访问1.js源文件(jqTree)中的变量以重写方法,javascript,jquery,jqtree,Javascript,Jquery,Jqtree,(JS、jQuery和jqTree新增) 我正在尝试覆盖一个方法(JqTreeWidget.prototype.openNode),该方法来自一个.js文件(我自己的custom.js) 我读过。所以我尝试在方法上这样做,我想我被困在访问具有原始方法的变量上了(JqTreeWidget)。我认为挑战在于原始方法位于tree.jquery.js(源代码)中,它与我自己的另一个custom.js文件分离,我想在其中执行覆盖 这个问题的目标是允许我在我的custom.js中编写(将是这个问题的答案):
JqTreeWidget.prototype.openNode
),该方法来自一个.js文件(我自己的custom.js
)
我读过。所以我尝试在方法上这样做,我想我被困在访问具有原始方法的变量上了(JqTreeWidget
)。我认为挑战在于原始方法位于tree.jquery.js
(源代码)中,它与我自己的另一个custom.js
文件分离,我想在其中执行覆盖
这个问题的目标是允许我在我的custom.js
中编写(
将是这个问题的答案):
var originalMethod=;
//原始方法的重写
=功能(节点、幻灯片){
//我的代码我想在这里先发生
递归地更改存储高度(node,true);
//我的代码完成了,现在我准备调用原始方法
调用(此、节点、幻灯片);
}
我认为这将是进行覆盖的最非侵入性的方式,而不需要实际侵入树.jquery.js
源代码
查看我的custom.js
at
单独的sourcetree.jquery.js
被添加到该代码笔的js设置中
如何(从我的custom.js
文件中)访问源文件(tree.jquery.js
)中的JqTreeWidget
变量?这可能吗?JqTreeWidget
是否不在tree.jquery.js
范围之外,或者它不是一个全局变量?我希望treeContainer.tree.prototype
会有它,但到目前为止我还没有运气
谢谢 原型对象可通过以下方式获得:
jQuery.fn.tree("get_widget_class").prototype
注意,这不是任何jQuery插件的通用解决方案。这是由树插件显式实现的。我发现了这个黑客解决方法。但由于这是一个黑客行为,我仍然希望找到这个问题的答案(因此请继续回答我在问题中提到的
,谢谢)
正如在这个问题中所述,目标涉及到在custom.js
中外部覆盖JqTreeWidget.prototype.openNode
(来自tree.jquery.js
)。因此,递归地调用changeancestorheights
(我的代码)和JqTreeWidget.prototype.openNode
都将通过custom.js
中的覆盖进行,并且根本不修改tree.jquery.js
源代码
解决方法:
递归地更改存储高度=1;
custom.js
中,将globar变量设置为函数(我希望在JqTreeWidget.prototype.openNode
之前调用的函数):
window.changeancestorheight递归地=changeancestorheight递归地代码>
JqTreeWidget.prototype.openNode
开头的全局变量引用函数(侵入tree.jquery.js
):
JqTreeWidget.prototype.openNode=函数(节点,幻灯片){
//我能想出的唯一办法是在这个方法的其余部分之前执行它
//(custom.js中的全局变量引用函数)
递归更改存储高度(node,true);
//原始openNode代码的其余部分。。。
}
tree.jquery.js
中调用my code函数,而不是从custom.js
中调用重写的方法由于全局变量和修改tree.jquery.js
source,所以这是一个有问题的问题。
这将暂时起作用,但希望能有一个像原问题中所述的不那么麻烦的解决方案。。。谢谢 FWIW:从理论上讲,在定义它之前(因为我的custom.js是最后加载的),递归调用它会有更改存储高度的风险。但实际上,JqTreeWidget.prototype.openNode只在用户inut上调用。因此,当输入发生时,所有的js都将被加载,因为用户在输入之前必须看到加载的页面:)看起来这确实得到了原型对象,谢谢!请注意,参数“get_widget_class”并不打算被替换:请将其保留在中,并按原样使用此答案中的代码。(一开始我很困惑,以为我需要为我的树替换一个CSS选择器,事实并非如此)只是好奇:介意解释一下“.fn.tree(“get_widget_class”)”是如何工作的吗?或者您是否有这些方法的API参考?感谢
jQuery。fn
是所有jQuery插件注册其功能的地方。它基本上是所有jQuery对象的原型。通过读取tree.jquery.js
文件,可以看到其余部分。我不知道它被记录在任何地方。很酷,谢谢。我猜在了解了所有这些之后,您可能已经通过文本搜索tree.jquery.js中的“fn”或“$.fn”来缩小了它的相关部分。从上面看,这是一个不错的代码。
jQuery.fn.tree("get_widget_class").prototype