2013-04-03 53 views
0

我正在創作插件,所以我轉向了jQuery文檔,它談論的不是混亂$ .fn對象,以及沒有一個插件應該聲稱超過$ .fn命名空間...創作插件jQuery文檔

(function($){ 

    var methods = { 
    init : function(options) { 
     // THIS 
    }, 
    show : function() { 
     // IS 
    }, 
    hide : function() { 
     // GOOD 
    }, 
    update : function(content) { 
     // !!! 
    } 
    }; 

    $.fn.tooltip = function(method) { 

    // Method calling logic 
    if (methods[method]) { 
     return methods[ method ].apply(this, Array.prototype.slice.call(arguments, 1)); 
    } else if (typeof method === 'object' || ! method) { 
    return methods.init.apply(this, arguments); 
    } else { 
     $.error('Method ' + method + ' does not exist on jQuery.tooltip'); 
    }  

    }; 

})(jQuery); 

// calls the init method 
$('div').tooltip(); 

// calls the init method 
$('div').tooltip({ 
    foo : 'bar' 
}); 

我明白了一切,直到:

 return methods[ method ].apply(this, Array.prototype.slice.call(arguments, 1)); 

一部分。

我改變了一點簡單:

$.fn.tooltip = function(method) 
{ 
    if(myFunc[method]) 
    { 
     return myFunc[method].apply(); 
    } 
} 

和它的作品就好了... ...可有人請向我解釋不清楚發生了什麼事情在那裏,爲什麼我的似乎只是正常工作?

編輯:順便說一句,我知道我沒有完全繼續if/else結構,那是因爲我純粹專注於我提到的行而不是if結構的其餘部分。

+0

你的方式是假設你的「方法」都不需要額外的參數。如果他們需要額外的參數,則需要添加它們。 YOu甚至可以進一步將其簡化爲'return myFunc [method]()' – 2013-04-03 19:40:45

+0

你能再詳細說明嗎?也許給了我如何添加額外參數的例子? 真的,我只是想了解jQuery的文檔示例發生了什麼。 – 2013-04-03 20:15:31

+0

例如,如果你的插件有一個「跳躍」方法,你會想給它一個「高度」參數。 '$(EL).myPlugin( 「跳」, 「3英尺」)'。如果您從原始代碼中刪除所有額外的東西,您將無法將「3ft」部分傳遞給該方法。 – 2013-04-03 20:18:15

回答

1

你的做法很好,但是,它不允許你傳遞任何參數到你的方法。

例如,如果你的插件有一個option方法,允許您更改提示文本選項,你會這樣稱呼它:

$(element).tooltip("option","text","foobar!!"); 

如果您刪除所有其他代碼,並使用你的方式這樣做,option方法將不會收到"text""foobar!!!"參數。