Hi,

I would like to do mouse tracking with tapestry (know the coordinates of
the mouse, the path of the DOM tree to the element that is being pointed
and the text of that element).

Currently I have a solution that works, but I think it is terribly
inefficient and I hope you can make any suggestions to improve it.

I have a JS library that calculates all those values and writes them to
"input hidden" form fields in my .tml

Then I used the ZoneUpdater mixin:

http://jumpstart.doublenegative.com.au/jumpstart/examples/ajax/onevent

I modified ZoneUpdater.java by adding a List attribute. That list will
contain the ids of the "input hidden fields" as you can see below.

Then, in the TML file, instead of

|<input t:type="TextField" t:id="firstName" t:mixins="zoneUpdater"
t:clientEvent="keyup" t:event="firstNameChanged" t:zone="nameZone" /><br/>|

I have

<p class="paragraph" t:type="any" t:mixins="zoneUpdater"
ZoneUpdater.clientEvent="mousemove" ZoneUpdater.event="track"
            ZoneUpdater.zone="textZone"
ZoneUpdater.fields="['documentHeightVal', 'documentWidthVal',
'windowHeightVal',
            'windowWidthVal', 'windowOffsetYVal', 'windowOffsetXVal',
'mouseYVal','mouseXVal', 'domPathVal',
'overTextVal']">${currentParagraph}</p>

then in zone-updater.js I add all those values to the URL.

Finally, in my page file, the onTrack() method is executed.

The problem here is that onActivate() is also being exectued, and
onActivate() has a lot of stuff that I want to execute only once (when
the page loads) and not every time the user moves the mouse.

Is there any other solution that does not trigger onActivate() every
time that the user moves the mouse on a component?

Regards,

Phy.


Reply via email to