2011-05-27 13 views
5

Bir jQuery eklentisi yaptım ve çok iyi çalışıyor. Bunun dışında, aynı sayfada birden fazla örneğim olduğunda, sonuncu seçenekler/ayarlar her ikisi için de kullanılır.Varsayılan ve farklı örneklerle jquery ayarları

İşte bir soyulmuş versiyonu ... uzunluğu için üzgünüm.

(function() { 

    var settings = {}; 
    var defaults = { 
     duration : 1000, 
     easingShow : 'easeOutBounce', 
     easingHide : 'easeOutQuad' 
    }; 

    var methods = { 
     init : function(options) { 

      return this.each(function(n) { 

       settings = $.extend(defaults, options); 

      }); 

     }, 

     show : function() { 

      // settings used here 
     }, 

     hide : function() { 
      // also used here 
     } 
    }; 

    $.fn.expander = function(method) { 

     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.expander'); 
     } 

    }; 

})(jQuery); 

Eminim ki, sık sık kafam karıştığı için bir çeşit ad alanı sorunu olduğuna eminim.

Teşekkür

cevap

6

http://api.jquery.com/jQuery.extend/

 
deep  If true, the merge becomes recursive (aka. deep copy). 
target The object to extend. It will receive the new properties. 
object1 An object containing additional properties to merge in. 
objectN Additional objects containing properties to merge in. 

@ jquery dokümanlardan kullanım

settings = $.extend(true, {}, defaults, options); 

hedef nesne (ilk argüman) modifiye edilecek unutmayın ve ayrıca olacak $ .extend() 'dan döndü. Ancak, her iki orijinal nesneyi de korumak istiyorsak, bunu boş bir nesneyi hedef olarak geçirerek yapabiliriz.

çalışan bir demo .data()

kontrol dışarı kullanarak her elemanın onları saklayabilir, öğe başına farklı ayarlara sahip için: http://jsfiddle.net/roberkules/XvKs8/

+0

Teşekkür, ancak sorunu kaçırdığınızı düşünüyorum. Sorun, ayar değişkenini değiştirdiğim şekilde değil. Bunu, eğer 'this.each (function() {})' i döndürdüğümde, o zaman bu bölüm show ve hide fonksiyonu için erişilebilir değildir. Ama eğer bunu dışarı çıkarırsam, yaptığım gibi eklenti üzerinde etkin olan her eleman için aynıdır. – ianbarker

+0

Demoyu kontrol edin, ihtiyacınız olanı yapmalı. – roberkules

+1

Veri() kullanmayı denemek ve kullanmaktan kaçınmak istemiştim ama sanırım tek yol bu. – ianbarker

İlgili konular