[jquery-dev] Re: Plugin development question

2009-11-26 Thread Paul Irish
Hi,

I have a little plugin factory script, based on some code from
others.. I think it'll get you where you're trying to go:

http://code.paulirish.com/sandbox/pluginfactory.js

You can define those functions in an object literal (or in a
constructor), and then reference the element with this.$elem.

G'luck.



On Nov 26, 3:25 am, Lukáš  wrote:
> Nevermind that, I figured it out, as always I didnt think of the
> simplest option.
>
> But I will reform my question to this.
>
> I create my own function.
>
> $.fn.dr =
>  function(settings) {
>                 this.each(function(settings) {
>                         process(this, settings);
>                 });
>
>     return this;
>
> }
>
> And now I want to extend my own function as follow:
>
> $.extend($.fn.dr, {
>                 update:
>                         function(input) {
>                                 process(this, false, 'update', input);
>                         },
>                 del:
>                         function(input) {
>
>                         },
>                 add:
>                         function(input) {
>
>                         }
>         });
>
> My problem is that I cant access "this", which is the current jQuery
> object. so "this.each..." wont work and I have no idea how to access
> the current object there, cry.
>
> Anyway the "process" function will create new "datareader" object and
> loop trough all attributes of the provided element from selector and
> find the first reference of the bracket (provided in settings) and
> then create and return an object of the data provided. As I said that
> works with no problem.
>
> But how can I access the jQuery object in extended functions?
> Accessing it when I will extend jQuery its easy, but I dont understand
> how to do it when I extend my own function instead of jQuery.
>
> I hope you guys get it now ;P
>
> Regards
>
> On 25. Nov, 16:19 h., "\"Cowboy\" Ben Alman"  wrote:
>
> > I'd love to help, but I have absolutely no idea what you're trying to
> > do! I'd recommend starting with working code, then figure out how to
> > organize and generalize it.
>
> > - Ben
>
> > On Nov 25, 4:04 am, Lukáš  wrote:
>
> > > Hey,
>
> > > so after some time I decided to look into plugin creation. Since for
> > > some time I was forced to load up to 30 different variables from
> > > inputs, so I created a function that would read all the data from one
> > > instead of multiple inputs. So now I tried to reform it into a plugin.
> > > The problem starts here.
>
> > > Here is the code (simplified).
>
> > > (function($) {
> > >         $.datareader = function(settings) {
> > >                 if(!settings) {
> > >                         this.settings = $.extend({}, 
> > > $.datareader.defaults, settings);
> > >                 } else this.settings = settings;
> > >         };
>
> > >         $.datareader.defaults = {
> > >                 bracket: '{}'
> > >         }
>
> > >         $.extend($.fn.dr, {
> > >                 update:
> > >                         function(input) {
> > >                                 process(this, false, 'update', input);
> > >                         },
> > >                 del:
> > >                         function(input) {
>
> > >                         },
> > >                 add:
> > >                         function(input) {
>
> > >                         }
> > >         });
>
> > >         $.fn.dr = function(settings) {
> > >                 this.each(function(settings) {
> > >                         process(this, settings);
> > >                 });
>
> > >     return this;
> > >         }
>
> > > })(jQuery);
>
> > > "process" function in does all the stuff needed since I need it
> > > multiple times and returns an object. Now my question is about
> > > "$.fn.dr". How can I force it to return a value instead of just
> > > executing the function, I tried multiple ways but none of them worked.
> > > Which would be fine for the functions that extend this one, since
> > > there I need it to be executed instead of returing a value. Also I
> > > dont really need the "$.fn.dr" function to loop trough all elements
> > > since its only for my internal use, I know it will be fired only on
> > > one.
>
> > > So to put it simple how can I force the function to return an actual
> > > value? :)
>
> > > Oh and one more think. I create a "new $.datareader" object each time
> > > its fired. Wouldnt that be a major slowdown or something if it will be
> > > exucuted lets say 20 times? (which can easily happen)

--

You received this message because you are subscribed to the Google Groups 
"jQuery Development" group.
To post to this group, send email to jquery-...@googlegroups.com.
To unsubscribe from this group, send email to 
jquery-dev+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/jquery-dev?hl=en.




[jquery-dev] Re: Plugin development question

2009-11-26 Thread Lukáš
Nevermind that, I figured it out, as always I didnt think of the
simplest option.

But I will reform my question to this.

I create my own function.

$.fn.dr =
 function(settings) {
this.each(function(settings) {
process(this, settings);
});

return this;
}

And now I want to extend my own function as follow:

$.extend($.fn.dr, {
update:
function(input) {
process(this, false, 'update', input);
},
del:
function(input) {

},
add:
function(input) {

}
});

My problem is that I cant access "this", which is the current jQuery
object. so "this.each..." wont work and I have no idea how to access
the current object there, cry.

Anyway the "process" function will create new "datareader" object and
loop trough all attributes of the provided element from selector and
find the first reference of the bracket (provided in settings) and
then create and return an object of the data provided. As I said that
works with no problem.

But how can I access the jQuery object in extended functions?
Accessing it when I will extend jQuery its easy, but I dont understand
how to do it when I extend my own function instead of jQuery.

I hope you guys get it now ;P

Regards

On 25. Nov, 16:19 h., "\"Cowboy\" Ben Alman"  wrote:
> I'd love to help, but I have absolutely no idea what you're trying to
> do! I'd recommend starting with working code, then figure out how to
> organize and generalize it.
>
> - Ben
>
> On Nov 25, 4:04 am, Lukáš  wrote:
>
> > Hey,
>
> > so after some time I decided to look into plugin creation. Since for
> > some time I was forced to load up to 30 different variables from
> > inputs, so I created a function that would read all the data from one
> > instead of multiple inputs. So now I tried to reform it into a plugin.
> > The problem starts here.
>
> > Here is the code (simplified).
>
> > (function($) {
> >         $.datareader = function(settings) {
> >                 if(!settings) {
> >                         this.settings = $.extend({}, $.datareader.defaults, 
> > settings);
> >                 } else this.settings = settings;
> >         };
>
> >         $.datareader.defaults = {
> >                 bracket: '{}'
> >         }
>
> >         $.extend($.fn.dr, {
> >                 update:
> >                         function(input) {
> >                                 process(this, false, 'update', input);
> >                         },
> >                 del:
> >                         function(input) {
>
> >                         },
> >                 add:
> >                         function(input) {
>
> >                         }
> >         });
>
> >         $.fn.dr = function(settings) {
> >                 this.each(function(settings) {
> >                         process(this, settings);
> >                 });
>
> >     return this;
> >         }
>
> > })(jQuery);
>
> > "process" function in does all the stuff needed since I need it
> > multiple times and returns an object. Now my question is about
> > "$.fn.dr". How can I force it to return a value instead of just
> > executing the function, I tried multiple ways but none of them worked.
> > Which would be fine for the functions that extend this one, since
> > there I need it to be executed instead of returing a value. Also I
> > dont really need the "$.fn.dr" function to loop trough all elements
> > since its only for my internal use, I know it will be fired only on
> > one.
>
> > So to put it simple how can I force the function to return an actual
> > value? :)
>
> > Oh and one more think. I create a "new $.datareader" object each time
> > its fired. Wouldnt that be a major slowdown or something if it will be
> > exucuted lets say 20 times? (which can easily happen)

--

You received this message because you are subscribed to the Google Groups 
"jQuery Development" group.
To post to this group, send email to jquery-...@googlegroups.com.
To unsubscribe from this group, send email to 
jquery-dev+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/jquery-dev?hl=en.




[jquery-dev] Re: Plugin development question

2009-11-25 Thread "Cowboy" Ben Alman
I'd love to help, but I have absolutely no idea what you're trying to
do! I'd recommend starting with working code, then figure out how to
organize and generalize it.

- Ben

On Nov 25, 4:04 am, Lukáš  wrote:
> Hey,
>
> so after some time I decided to look into plugin creation. Since for
> some time I was forced to load up to 30 different variables from
> inputs, so I created a function that would read all the data from one
> instead of multiple inputs. So now I tried to reform it into a plugin.
> The problem starts here.
>
> Here is the code (simplified).
>
> (function($) {
>         $.datareader = function(settings) {
>                 if(!settings) {
>                         this.settings = $.extend({}, $.datareader.defaults, 
> settings);
>                 } else this.settings = settings;
>         };
>
>         $.datareader.defaults = {
>                 bracket: '{}'
>         }
>
>         $.extend($.fn.dr, {
>                 update:
>                         function(input) {
>                                 process(this, false, 'update', input);
>                         },
>                 del:
>                         function(input) {
>
>                         },
>                 add:
>                         function(input) {
>
>                         }
>         });
>
>         $.fn.dr = function(settings) {
>                 this.each(function(settings) {
>                         process(this, settings);
>                 });
>
>     return this;
>         }
>
> })(jQuery);
>
> "process" function in does all the stuff needed since I need it
> multiple times and returns an object. Now my question is about
> "$.fn.dr". How can I force it to return a value instead of just
> executing the function, I tried multiple ways but none of them worked.
> Which would be fine for the functions that extend this one, since
> there I need it to be executed instead of returing a value. Also I
> dont really need the "$.fn.dr" function to loop trough all elements
> since its only for my internal use, I know it will be fired only on
> one.
>
> So to put it simple how can I force the function to return an actual
> value? :)
>
> Oh and one more think. I create a "new $.datareader" object each time
> its fired. Wouldnt that be a major slowdown or something if it will be
> exucuted lets say 20 times? (which can easily happen)

--

You received this message because you are subscribed to the Google Groups 
"jQuery Development" group.
To post to this group, send email to jquery-...@googlegroups.com.
To unsubscribe from this group, send email to 
jquery-dev+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/jquery-dev?hl=en.