@Trey,
You created a plugin to deal with the exact problems we have been
talking about :).
Have you developed a JS centered application, something that could
be considered a 'Thin-Server-Architecture' app?
When you build the entire HTML structure client side, a lack of a JS
template (View) is brutal.
If you only have raw services to work from, something that can wrap
and provide context to the data is essential.
Although widget.js comes close to a 'controller' anyway, wouldn't it
be great if you can make plugins like:
$.plugin('todo',{
init : function(element, options) {
//initialization code on the element
//uses something in 'data' as 'this' for state, instead of
this=element
this.created = true;
}
"a.destroy click" : function(element, event){
//uses event delegation to call without actually having to setup
delegation
this.destroyed = true;
},
destroyed : function(){ return this.destroyed } // a normal function
on the plugin
})
Widget.js could just see which functions look for events and setup
delegation on the element for you.
Now, what if you can create your plugin like:
var instances = $('.someClass').todo(options)
and it would return the 'instances' of the plugin you were operating
on so you could do something like:
instances[0].destroyed();
MVC isn't over-engineering in a 'large' project because it fits
perfects with what you always have to do.
-respond to events
-connect to/manipulate services
-wrap data from those services
-Build/manipulate HTML/DOM
Logically separating these concerns is extremely helpful. Doing it in
an organized and repeatable fashion is event more important.
@nicolas - I was never implying any of this should be part of the
core. It should not be. I was simply proposing that a new 'branch'
of jQuery is started with a focus on tools and structure needed for
large projects.
On Feb 25, 6:11 pm, tres <[email protected]> wrote:
> I think 'MVC as it states - Model, View, Controller - in JavaScript
> terms, is over-engineering what doesn't need to be over-engineered.
> jQuery in it's simplicity can evolve with a very complex application
> quite nicely.
>
> That being said, I have authored myself a plugin called jFrame in
> order to help with code convention, organization as well as automated
> loading. Works nicely for me.
>
> -Trey
>
> On Feb 25, 8:26 am, John Resig <[email protected]> wrote:
>
> > Ok, so boiling down a list:
>
> > Needs code:
> > - Widget utility (I'm working on this)
> > - Debugging utility
> > - Static plugin analyzer
>
> > Need a tutorial to cover the concepts of (I'm working on this):
> > - Encapsulation
> > - Extensibility
> > - Modularity
>
> > Needs (defined/documented) conventions:
> > - File names
> > - Method names
> > - Method structures
> > - Testing
> > - Documentation
> > - Packaging
>
> > Once the above conventions are finalized, that static plugin analyzer
> > can be written.
>
> > Once the widget code is done, the tutorial needs to be updated.
>
> > ---
>
> > So, with that drawn in the sand, Justin, would you be interested in
> > working on the debugging plugin, the static analyzer, defining
> > conventions, all of the above?
>
> > Any/all of those would be a huge help and I'd imagine that if the work
> > is solid they should all become official jQuery projects/conventions.
>
> > Now I'm not discounting any additional code or patterns but we need to
> > start with what we have and make sure that we're working with the best
> > possible resources. If we define the above conventions and code we may
> > find that there is less of a need for a new project than we originally
> > thought - and we get the benefit of having excellently defined and
> > documented resources and conventions for people to use - so everyone
> > wins.
>
> > --John
>
> > On Tue, Feb 24, 2009 at 2:41 PM, Justin Meyer <[email protected]>
> > wrote:
>
> > >> - package and minimize multiple files (YUI Compressor)
>
> > > - Could be solved much better as it is not integrated into the
> > > 'framework'. You have to 'double' include everything (once in your
> > > page, another in your build script). You have to set your html to
> > > switch from loading separate files to loading the combined in
> > > production.
>
> > >> - documentation (jQuery Documentation Wiki - already allows devs to
> > >> have inline demos and can be extracted to external sources)
>
> > > Unless I am misunderstanding something, does this allow me to document
> > > my application, or is this just for jQuery? I am talking about
> > > something similar to JSDoc.
>
> > >> - testing (QUnit)
>
> > > Does it handles synthetic events? Can it run server-side to ensure
> > > sanity before checkin? Can you do point and click testing like
> > > selenium?
>
> > >> > Where do I put the files?
> > >> > What should I name the files?
>
> > >> I'm not completely convinced that this is a huge problem - but at
> > >> worst this could be solved through convention and documentation.
>
> > >> > How/where should I respond to events?
> > >> > How should I deal with state?
> > >> > How can I maximize the chances of re-usability?
>
> > >> All three of these are handled either through better documentation or
> > >> with the widget/jQuery.plugin code that I showed earlier (it
> > >> especially helps to deal with state and reusability, while responding
> > >> to events would be more of a documentation issue).
>
> > > Yes, these conventions are exactly what is needed. Documentation can
> > > definitely do that, but so far I've not seen it for jQuery.
>
> > >> > Where should I be connecting to the service?
>
> > >> That's probably outside the scope of anything that we would do, since
> > >> it would probably define what needs to happen on the server-side.
>
> > > I mean, where should ajax calls happen in the client? In JMVC they
> > > are in the Model, akin to ORM.
>
> > >> > How can I wrap the service data? (For example, maybe the todo has
> > >> > passed it's completion date and you want to ask it .isPastDue().
>
> > >> This seems like another case of encapsulation or dealing with state
> > >> (imo).
>
> > >> > How can I create HTML in a readable manner?
>
> > >> At best, something that's done through convention.
>
> > > Yes, but where should that html go, etc. Yes, convention is needed.
> > > I guess that is the central point we've arrived at.
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---