Hi all I'm struggling to get a private function running in a plugin. Here are the 2 pieces of code, first the running version then the more elegant but broken. Obviously there is something that I have understood wrong in the pattern. Can somebody point me to a better way to do this ?
//fully functionning (function($){ $.fn.treeview = function(o){ var defaults = { minus: 'url(style/site/interface/public/treeview/minus.gif) 0 0 no-repeat', plus: 'url(style/site/interface/public/treeview/plus.gif) 0 0 no-repeat' }; var opt = $.extend(defaults, o); var $ul = $('li ul', this); var $li = $('li', this); $li.each(function(o, i){ $sub_ul = $('ul', this); if ($sub_ul.length != 0) { if ($sub_ul.css('display') != 'none') $(this).css({background: opt.minus}); else $(this).css({background: opt.plus}); } }); return $li.toggle( function(){$ul.hide('slow');}, function(){$ul.show('slow');} ); } })(jQuery); // More elegant attempt but broken (function($){ //settings $.fn.treeview.defaults = { minus: 'url(style/site/interface/public/treeview/minus.gif) 0 0 no-repeat', plus: 'url(style/site/interface/public/treeview/plus.gif) 0 0 no-repeat' }; //private (but I tried also with $.fn.treeview.setBg = function(o)) function setBg(li){ $sub_ul = $('ul', li); if ($sub_ul.length != 0) { if ($sub_ul.css('display') != 'none') $(li).css({background: opt.minus}); else $(li).css({background: opt.plus}); } } //constructor $.fn.treeview = function(o){ var opt = $.extend(defaults, o); var $ul = $('li ul', this); var $li = $('li', this); $li.each(function(o, i){ $(o).setBg(); }); return $li.toggle( function(){$ul.hide('slow');}, function(){$ul.show('slow');} ); } })(jQuery);