如何访问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)

感谢, 萨科

+0

对不起,我在这里很新,不知道! – Nicolas 2011-05-12 08:03:04

$('#someDivId').raty();将附加的功能,以这种特殊的jQuery对象实例。当您再次拨打$('#someDivId')时,将创建一个新实例。

你必须保持原来的实例的引用:

var $div = $('#someDivId').raty(); 
// later 
$div.activate(); 

这假定raty()是一个好公民,并返回this。如果没有,你必须先参考:

var $div = $('#someDivId'); 
$div.raty(); 
+0

嗨费利克斯,感谢您的快速回答。问题是网站上的许多对象都使用这个插件(每个评论都有一个)。所以这是不可能的所有这些对象的参考。在任何时候,如果用户禁用评论,那么此时应该调用该评论的评分元素的激活/停用方法。 那么我试图做什么都不可能,或者我仍然在误解某些东西? – Nicolas 2011-05-12 08:07:09

+0

@Nicolas:如果你有很多,那么你可能不得不使用hashmap(一个对象)来存储引用。例如。选择器可以是键,jQuery对象的值。像'elements [selector] = $(selector).raty();'。您可能必须提供更多信息并解释插件的功能,以便我们能够为您提供更多帮助。 – 2011-05-12 09:38:22

+0

但是,根本不可能告诉插件不创建新的实例,而是使用旧的实例?那么这些方法在那里延伸?或者使用元素id访问(以某种方式)jQuery实例availalbe并在那里搜索它?使用这样的散列表是不可能的,因为页面每3秒部分更新一次。 – Nicolas 2011-05-12 11:21:00