Nate -

There have been a couple attempts at namespacing.

I did one:
http://dev.jquery.com/~john/plugins/space/

and so did Ariel:
http://flesler.blogspot.com/2008/04/jquerymodularize.html

They're two different techniques but both seem to work 'ok'.

--John



On Thu, Nov 13, 2008 at 2:34 PM, Nate Cavanaugh <[EMAIL PROTECTED]> wrote:
> Ah, okay, so I guess it is what it is as far as subclassing it then.
> Do you know if there are any plans to allow namespacing of plugins, or some
> other way to keep a set of functionality from bleeding out into the global
> scope?
> Thanks for all your help John,
> Nate Cavanaugh
> Director of User Interface Engineering
> Liferay, Inc.
> Enterprise. Open Source. For life.
>
>
>
>
> On Nov 12, 2008, at 1:20 PM, John Resig wrote:
>
> Well, the issue is that jQuery references itself internally -
> including within the init function. Thus calls to jQuery.foo() or
> jQuery() go back to the original jQuery method, rather than your
> subclass. I don't think there's really any way around that (short of
> re-writing every function in jQuery that you don't want to have access
> the old jQuery name/constructor).
>
> --John
>
>
>
> On Wed, Nov 12, 2008 at 3:46 PM, Nate Cavanaugh <[EMAIL PROTECTED]> wrote:
>
> Thanks John,
>
> It's sooo close.
>
> But it doesn't read the selectors of the query (because of the return
>
> jQuery.fn.init.call(this)) so this in the plugins always refers to the
>
> document.
>
> If you try to do an apply(this, arguments) or even manually pass in the
>
> arguments to .call() it doesn't work (it won't even attach anything to
>
> subClass.fn).
>
> Any insight you can give is GREATLY appreciated :)
>
> Nate Cavanaugh
>
> Director of User Interface Engineering
>
> Liferay, Inc.
>
> Enterprise. Open Source. For life.
>
>
>
>
> On Nov 12, 2008, at 11:51 AM, John Resig wrote:
>
> Fixed it:
>
> http://dev.jquery.com/~john/plugins/subclass/
>
> The issue was that in:
>
> subClass.fn.init.prototype = subClass.prototype;
>
> subClass.fn.init was just a reference to jQuery.fn.init - thus when
>
> you modified its prototype property you were modifying the original
>
> jQuery init prototype property - breaking future uses. Thus you just
>
> have to do a quick little wrapper function around the original init,
>
> like so:
>
> var subClass = function(selector, context){
>
>       return new subClass.fn.init(selector, context);
>
> };
>
> subClass.fn = subClass.prototype = jQuery();
>
> subClass.fn.init = function(){
>
>       return jQuery.fn.init.call(this);
>
> };
>
> subClass.fn.init.prototype = subClass.prototype;
>
> Which could be made into a reusable function:
>
> function subjQuery(){
>
>       var subClass = function(selector, context){
>
>               return new subClass.fn.init(selector, context);
>
>       };
>
>       subClass.fn = subClass.prototype = jQuery();
>
>       subClass.fn.init = function(){
>
>               return jQuery.fn.init.call(this);
>
>       };
>
>       subClass.fn.init.prototype = subClass.prototype;
>
>       return subClass;
>
> }
>
> var myNewjQuery = subjQuery();
>
> --John
>
>
>
> On Wed, Nov 12, 2008 at 2:29 PM, Nate Cavanaugh <[EMAIL PROTECTED]> wrote:
>
> Thanks John :)
>
> I think this has solidified the issue I was seeing, and it might not be an
>
> issue at all, but it's insanely weird...
>
> var subClass = function(selector, context){
>
> return new subClass.fn.init(selector, context);
>
> };
>
> subClass.fn = subClass.prototype = new jQuery.fn.init();
>
> subClass.fn.init.prototype = subClass.prototype;
>
> jQuery.fn.t2 = function(){
>
> console.log('jQuery plugin', this, arguments);
>
> };
>
> subClass.fn.t2 = function(){
>
> console.log('subClass plugin', this, arguments);
>
> };
>
> subClass('body').t2(1,2); //Should print out 'subClass plugin, [body],
>
> [1,2]'
>
> jQuery('body').t2(3,4); // Should print out 'jQuery plugin, [body], [3,4]',
>
> but prints subClass plugin, [body], [3,4]
>
> console.log(jQuery.fn.t2, jQuery.fn.t2 === subClass.fn.t2); // returns
>
> false, as expected
>
> It is driving me nuts, I can't make heads or tails of whats happening...
>
> Nate Cavanaugh
>
> Director of User Interface Engineering
>
> Liferay, Inc.
>
> Enterprise. Open Source. For life.
>
>
>
>
> On Nov 12, 2008, at 11:17 AM, John Resig wrote:
>
> Tweaked your example to make that work - it now works for both queries
>
> and adding methods:
>
> http://dev.jquery.com/~john/plugins/subclass/
>
> You did:
>
> subClass.fn.init= subClass.prototype;
>
> Which should've been:
>
> subClass.fn.init.prototype = subClass.prototype;
>
> --John
>
>
>
> On Wed, Nov 12, 2008 at 2:08 PM, Nate Cavanaugh <[EMAIL PROTECTED]> wrote:
>
> Heya John,
>
> Thanks for the response, and sorry I wasn't more clear. I've tried so many
>
> different variations of this, that I can't remember which did what.
>
> That one does keep the chain properly in place, but this doesn't work:
>
> subClass('body') // Should error out and say subClass.fn.init is not a
>
> constructor.
>
> Every way I was able to get the above to work, it would only do so by
>
> maintaining the link between subClass.fn and jQuery.fn.
>
> Is there any other way you can think of that would essentially (and in a way
>
> that's performant) extend a new object off the jQuery object?
>
> Thanks again for your guys time :)
>
> Nate Cavanaugh
>
> Director of User Interface Engineering
>
> Liferay, Inc.
>
> Enterprise. Open Source. For life.
>
>
>
>
> On Nov 12, 2008, at 6:37 AM, John Resig wrote:
>
> Try as I might I can't reproduce your problem. I created a test page:
>
> http://dev.jquery.com/~john/plugins/subclass/
>
> I overwrote the removeClass method and they're both different on each
>
> object (subClass vs. jQuery).
>
> Maybe there's another mistake at play?
>
> --John
>
>
>
> On Tue, Nov 11, 2008 at 6:37 PM, Nate Cavanaugh <[EMAIL PROTECTED]> wrote:
>
> Hi all,
>
> As promised, here is the second topic I wanted to ask about:
>
> Are there any plans, or is there any current way to subclass the jQuery
>
> object? I've been doing a lot of digging around and I've seen some talks
>
> about it, and there have been some questions about what the use would be,
>
> but I've found a use case, and me, Paul, and Eduardo have all tried to
>
> figure out a way, but to no avail.
>
> Here is the use case:
>
> I want to create a function that behaves exactly like jQuery, except that it
>
> does some slightly different things, and be able to extend it without
>
> worrying about what the parent jQuery object is doing, or what plugins have
>
> been loaded globally.
>
> The benefits are that it would use the prototype chain, so it would be
>
> memory efficient, and it would be a way to add plugins without them being
>
> clobbered by other plugins.
>
> So, I've tried a bunch of stuff:
>
> var subClass = function(sel, context){
>
> return new subClass.fn.init(sel, context);
>
> }
>
> subClass.fn = subClass.prototype = new jQuery.fn.init;
>
> subClass.fn.init = subClass.prototype;
>
> and I've tried so many different variations of this, but anytime I try to
>
> do:
>
> subClass.fn.test = function(){}
>
> it, without fail, creates jQuery.fn.test.
>
> To show what I am trying to do, I'll give an example:
>
> jQuery.fn.plugin1 = function(){
>
> console.log('I am global, everyone can see me');
>
> return this;
>
> } // globally available plugin
>
> subClass.fn.plugin1 = function(){
>
> console.log('I am local, and I am only run when using the subclass');
>
> return this;
>
> } // my own local plugin
>
> so you could do:
>
> jQuery('body').plugin1(); // prints 'I am global, everyone can see me'
>
> subClass('body').plugin1(); // prints 'I am local, and I am only run when
>
> using the subclass'
>
> However, namespaced plugins is only one advantage. Being able to attach
>
> custom static methods, etc, would be incredibly useful.
>
> Does anyone know of a way to subclass the jQuery object using it's
>
> prototype?
>
> Thanks again for reading all of this. I truly appreciate it,
>
> Nate Cavanaugh
>
> Director of User Interface Engineering
>
> Liferay, Inc.
>
> Enterprise. Open Source. For life.
>
>
>
>
>
>
>
> Nate Cavanaugh
>
> Director of User Interface Engineering
>
> Liferay, Inc.
>
> Enterprise. Open Source. For life.
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> Nate Cavanaugh
>
> Director of User Interface Engineering
>
> Liferay, Inc.
>
> Enterprise. Open Source. For life.
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> Nate Cavanaugh
> Director of User Interface Engineering
> Liferay, Inc.
> Enterprise. Open Source. For life.
>
>
>
>
>
> >
>

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

Reply via email to