2010-02-28 20 views
8

im Moment habe ich mein jQuery-Plugin läuft seine Logik in if Statements.Ein besseres jQuery-Plugin schreiben

Zum Beispiel habe ich:

(function($) { 
    $.fn.myplugin = function(action) { 

     if(action == "foo"){ 

     } 

     if(action == "bar"){ 

     } 

     if(action == "grapefruits"){    

     } 

    } 
})(jQuery); 

Gibt es einen besseren Weg, um dies zu realisieren?

Auch dasselbe mit Event-Handlern, kann ich sie innerhalb des Plugins erklären?

Antwort

9

Sie können in einem Objekt verschiedene Funktionen speichern und einen Indexer, wie folgt verwenden:

(function($) { 
    var methods = { 
     foo: function(action) { ... }, 
     bar: function(action, someParam) { ... }, 
     grapefruits: function(action, param1, param2) { ... }, 
     ... 
    }; 

    $.fn.myplugin = function(action) {  
     methods[action].apply(this, arguments); 
    } 
})(jQuery); 
+0

Kann ich einen String mit '$ (" .... ")' umschließen und einige Funktionen hinzufügen, um den String zu manipulieren? – uzay95

2

Es gibt keinen Grund, die Aktion mehrmals zu überprüfen, oder? Sie können auch sonst verwenden, wenn.Ich mag nicht die Syntax für switch persönlich, und bevorzugen diesen Stil. Sie können es tun wie

Eine andere Option ist, jedes als einen Namen in einem Objekt zu speichern. Dies wird zum Beispiel auch in Python gemacht.

var plugin_actions={ 
     'foo':function(){}, 
     'bar':function(){}, 
     'grapefruits':function(){} 
     } 
    plugin_actions[action](); 
+1

Die zweite Lösung verliert den "Dies" -Kontext und die Parameter. Siehe meine Antwort. – SLaks

+0

Sehr guter Punkt, danke. – JAL