Javascript 将jQuery引用传递给回调或插件的标准方法
传递缓存jQuery引用的推荐方法是什么,例如Javascript 将jQuery引用传递给回调或插件的标准方法,javascript,scope,jquery-callback,Javascript,Scope,Jquery Callback,传递缓存jQuery引用的推荐方法是什么,例如var$domContainer=$(“#container”)中的$domContainer作为回调函数发送到函数 例如: <script src="/plugins.js"></script> 在主脚本中 <script src="/scripts.js"></script> 方法是使用内联函数包装回调函数名吗 任何指向标准实践的指针都是受欢迎的。如果您希望访问$domTable,则可以使用事件
var$domContainer=$(“#container”)中的$domContainer
如果函数是在$(document).ready()之前和之外定义的,则将code>作为回调函数发送到函数
例如:
<script src="/plugins.js"></script>
在主脚本中
<script src="/scripts.js"></script>
方法是使用内联函数包装回调函数名吗
任何指向标准实践的指针都是受欢迎的。如果您希望访问$domTable,则可以使用事件对象的属性,而无需遍历dom。不过,您必须将其包装在jQuery对象中
编辑
将上下文和额外属性传递给外部函数的标准方法是使用jQuery,或者jQuery为该行为(也称为
在您使用$domTable
的示例中,上下文已作为选择器的目标传递,因此您所需的一切都可以使用
在您的$domFilters
示例中,没有要作为上下文传递的事件对象,因为事件映射到dom中的实际事件,并且只有一个集合,所以您无法使用该函数,因为它依赖于事件对象
如果我在传递上下文的同时从集合调用另一个函数,我会使用类似这样的方法
$domFilters=$('#form.filter');
$domFilters.each(函数(){
//调用传递jQuery包装项的外部函数
//作为上下文。
调用($(this));
});
//你的外部功能
函数externalFunction(){
//“this”现在将引用调用中传递的上下文。
//即您的$(.filter)项目。
}
您的实用程序函数必须设计为能够处理作为上下文传递给它的任何内容以及任何附加参数 您可以通过定义名称空间来遵循模块化方法。那么你就不必使用ready了
//These four will be open
var objects, handlers, bindings,
NameSpace = {
//This is where you cache references
objects: {
domcontainer: $('.domcontainer')
},
//Do the events to handlers bindings
bindings: function(){
domcontainer.on('click', handlers.clickCallback)
}
//The actual handlers
handlers: {
clickCallback: function(e){
//Do something
}
},
//Initial things
init: function(){
objects = this.objects;
handlers = this.handlers;
//This will start the handler binding.
this.bindings();
}
};
$(function () {
NameSpace.init();
});
如果要动态添加对象,则可以在对象内部添加引用,作为返回实际对象引用的函数。每当你需要引用一个对象时,它就已经可用了,因此避免了DOM查找。嗨,詹姆斯,在这个特定的例子中,event.delegateTarget
是一个完美的答案,但一般来说,你会如何传递额外的缓存变量呢。我使用了一个糟糕的例子,因为jQuery在本例中已经有了一个直接引用(我不知道这一点),但是如果我有其他缓存变量,我会考虑更一般的情况,通常情况下就是这样。我将用更相关的上下文更新这个问题。嗨,James,在本例中,我们不使用$DOMPilters,但我们需要它可以传递给引用的外部函数。例如,$domFilters将包含对具有我们希望在外部函数中读取的值的对象的引用。但是,我们要做的是在需要时将引用传递给外部函数。这里的each()不会这样做,因为调用应该发生在事件上。是否设置了外部函数来处理集合?您只有一个事件参数,除非它正在访问arraytype参数,例如Array.prototype.slice.call(参数,1)代码>在这个范围内,你就不能用额外的参数做任何事情。嗨,Rutwick,我试图避免添加全局变量。比如顶部的Open3?是的。理想情况下,我们不希望在document.ready之外添加任何变量,并且,在我上面的简化示例中,您将寻找一种传递它的方法,可能是作为包含引用的对象或数组,或者作为返回变量的函数或包含引用的对象。
$(document).ready(function(){
// Cached References
var $domFilters = $('#form .filter'), // more than 1 reference returned
$domTable = $('#results'); // 1 reference returned
$domTable.on('click','.menu',rowAction);// reference function in plugins.js
// how do I pass $domFilters to rowAction to avoid dom lookups?
// I could pass $domFilters to a plugin like $(...).plugin({f:$domFilters});
// if it had optional arguments, but if it's not a plugin, what's the
// equivalent way to do it?
});
//These four will be open
var objects, handlers, bindings,
NameSpace = {
//This is where you cache references
objects: {
domcontainer: $('.domcontainer')
},
//Do the events to handlers bindings
bindings: function(){
domcontainer.on('click', handlers.clickCallback)
}
//The actual handlers
handlers: {
clickCallback: function(e){
//Do something
}
},
//Initial things
init: function(){
objects = this.objects;
handlers = this.handlers;
//This will start the handler binding.
this.bindings();
}
};
$(function () {
NameSpace.init();
});