如何访问jQuery插件扩展方法
我目前用的jQuery插件的工作称为RATY(以及许多其他),为正常的插件将执行以下操作:如何访问jQuery插件扩展方法
(function($){
$.fn.raty = function(settings, url){
// Some default operations
// Some functions
this.activate = function(){}
this.reset = function(){}
};
});
在我的代码
然后,我把它叫做通过这样做:
$('#someDivId').raty();
出现的问题是,当我想调用这些扩展的方法之一的“someDivId”(例如复位()),我看它在与jQuery $稍后阶段(” #someDivId'),但是当我对其执行任何扩展方法时,会发生错误(对象似乎没有这些方法附在它上面)。
这是一段代码,这是不工作:
$('#someDivId').activate();
我的问题是,你知道这是不可能的,从外面插件访问这些方法?如果不是,你知道这样做的通用方法吗?
在当前的例子中,我最终添加了一个隐藏的链接,可以通过点击来触发这些方法。 (但它仍然是一个丑陋的黑客对我来说:P)
感谢, 萨科
$('#someDivId').raty();
将附加的功能,以这种特殊的jQuery对象实例。当您再次拨打$('#someDivId')
时,将创建一个新实例。
你必须保持原来的实例的引用:
var $div = $('#someDivId').raty();
// later
$div.activate();
这假定raty()
是一个好公民,并返回this
。如果没有,你必须先参考:
var $div = $('#someDivId');
$div.raty();
嗨费利克斯,感谢您的快速回答。问题是网站上的许多对象都使用这个插件(每个评论都有一个)。所以这是不可能的所有这些对象的参考。在任何时候,如果用户禁用评论,那么此时应该调用该评论的评分元素的激活/停用方法。 那么我试图做什么都不可能,或者我仍然在误解某些东西? – Nicolas 2011-05-12 08:07:09
@Nicolas:如果你有很多,那么你可能不得不使用hashmap(一个对象)来存储引用。例如。选择器可以是键,jQuery对象的值。像'elements [selector] = $(selector).raty();'。您可能必须提供更多信息并解释插件的功能,以便我们能够为您提供更多帮助。 – 2011-05-12 09:38:22
但是,根本不可能告诉插件不创建新的实例,而是使用旧的实例?那么这些方法在那里延伸?或者使用元素id访问(以某种方式)jQuery实例availalbe并在那里搜索它?使用这样的散列表是不可能的,因为页面每3秒部分更新一次。 – Nicolas 2011-05-12 11:21:00
对不起,我在这里很新,不知道! – Nicolas 2011-05-12 08:03:04