2011-05-12 32 views
1

我目前用的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

回答

1

$('#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