IMHO, the JavaScript changes in T5.4 are just amazing. For the first time ever I have found myself writing significant JavaScript that worked the very first time it was run! I think it's due to the enforced modularity combined with the way that RequireJS making modularising oh so easy. In a component-oriented Tapestry world it's perfect.
To Paul, and others, do these examples cover the situations you are describing? If not, please say so, so that I will know to add others. http://jumpstart.doublenegative.com.au/jumpstart7/examples/javascript/javascript http://jumpstart.doublenegative.com.au/jumpstart7/examples/javascript/reusable http://jumpstart.doublenegative.com.au/jumpstart7/examples/javascript/robust http://jumpstart.doublenegative.com.au/jumpstart7/examples/javascript/mixin http://jumpstart.doublenegative.com.au/jumpstart7/examples/javascript/modal/1 http://jumpstart.doublenegative.com.au/jumpstart7/examples/javascript/reusablemodal/1 http://jumpstart.doublenegative.com.au/jumpstart7/examples/ajax/onevent http://jumpstart.doublenegative.com.au/jumpstart7/together/ajaxcomponentscrud/persons Geoff Do these examples help? If there's a missing situation, please let me know so I can add an example. On 13 Nov 2014, at 12:30 pm, Paul Stanton <pa...@mapshed.com.au> wrote: > Thank you both of you for your responses ... I am learning a lot and think > I'm close to what I need to convert at least some of my work. > > However I am still stumbling on this one use case which can be summed up by > the following question: > > "How do I refer back to an object which was created and returned from within > 'define'" > > ie: > > java:afterRender() > { > js.require("module").with("xyz"); > } > > java:onSomeAsyncEvent() > { > js. ??? // do something with module instance? > } > > I'm getting the feeling that the answer might be "it isn't" .. that all > future communication between server and client is achieved via > triggering/handling events... however there is a lot of ambiguity (possibly > due to my lack of understanding, and the abstraction caused by coffee?) in > the source code. > > Looking through the tapestry source as advised yields some questions, for > example, t5/core/confirm-click.js: > > return { > runDialog: runDialog > }; > > Why does this return this function, and how is that used/referenced elsewhere? > > and t5/core/autocomplete.js: > > (function() { > define([...], function(dom, ajax, $, _arg) { > var exports, extendURL, init; > ... > init = function(spec) { > return $field.typeahead({ > ... > }); > }; > return exports = init; > }); > }).call(this); > > I don't understand why 'init' returns the result of '$field.typeahead' and > what the "return exports = init;" achieves and how any of this is referred to > later on? > > Thanks, p. > > On 13/11/2014 8:26 AM, Kalle Korhonen wrote: >> Well, let me try to answer as well. I just rewrote one, simple old school >> component to new T5.4, perhaps that's one good data point. I find that the >> biggest difference is in attaching the event handlers and in the >> initialization, much else is the same. Objects are overrated for data >> encapsulation, variables trapped in closures serve the same purpose. >> >> As always, Tapestry's own source code is invaluable for understanding how >> things work, and often (perhaps not always) a good example of best >> practices. Namespace collisions are often less of a problem for a developer >> writing the web application but always an issue when developing components >> for general use. If you imagine multiple components from different sources >> working together, you can see how they might start stepping on each other >> fairly quickly, and those problems are hairy to debug and difficult to >> solve, so best to avoid in the first place. >> >> See my recent commit: >> https://github.com/tynamo/tynamo-federatedaccounts/commit/b48cf6e9338107b90cea8ad3bff6e75a90868bfd >> together with the origin javascript: >> http://svn.codehaus.org/tynamo/trunk/tynamo-federatedaccounts/tynamo-federatedaccounts-core/src/main/resources/org/tynamo/security/federatedaccounts/components/CollapsiblePanel.js >> >> You can see how there's even a pretty much unnecessary use of a class there. >> >> Javascript for built-in components are at >> https://github.com/apache/tapestry-5/tree/master/tapestry-core/src/main/coffeescript/META-INF/modules/t5/core. >> It's often required to take a look at the corresponding .java source >> understand how it all fits together. >> >> The documentation that Howard wrote on this is actually excellent, see >> http://tapestry.apache.org/client-side-javascript.html and >> http://tapestry.apache.org/javascript-modules.html, but like any other new >> programming concept, requires you to actually learn it, not just just >> reading it through. >> >> Coffeescript is another topic. The good thing is you don't have to get into >> it at all if you don't want to. I like the syntax but I'm still not sure if >> it's worth the additional complexity. Anyway for transcompiling on-the-fly, >> tapestry-webresources is great and takes all the pain away when developing >> your own web app. >> >> Kalle >> >> >> On Wed, Nov 12, 2014 at 3:13 AM, Paul Stanton <pa...@mapshed.com.au> wrote: >> >>> Hi, >>> >>> so like many developers (i'm guessing) I'm not quite up to speed with all >>> these new javascript frameworks: requirejs, closure, etc etc and to be >>> honest I really didn't see a problem with the namespace model of the past. >>> I'm not open to learning but it seems like a paradigm far removed from what >>> i'm used to. it doesn't seem object oriented at all for example. >>> >>> that aside, can someone please point me (and other readers) to some basic >>> examples to get us started in this brave new world. the first thing I would >>> like to achieve is to be able to call some page or component specific >>> marshalling code with page/component context parameters. >>> >>> your helpful attitudes will be appreciated! >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org >>> For additional commands, e-mail: users-h...@tapestry.apache.org >>> >>> > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > For additional commands, e-mail: users-h...@tapestry.apache.org > --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org