your problem on this one is that you want to get the url when the
javascript is executed, not when the template is being rendered, and you
are mixing the two contexts. this is a general timeline of when things
would be executed ...
browser sends request
roller gets request
roller does template rendering
roller returns html
browser gets response
browser executes javascript
browser done rendering
when you have $url.category("catname") in your templates, that is a
velocity call which happens during template rendering. so you need to
have a real value for that call at that time.
unfortunately, there isn't really a way to provide a javascript widget
access to velocity functions run during the rendering process, but there
are 2 ways to could deal with this.
1. build a map of all your category links during rendering, then access
that map as javascript when your js function is called. basically you
would be building your javascript function at template rendering time.
2. do like you had done in your old function and just piece together the
url yourself ...
#set( $blogURL = "$url.home" )
if (catname == "All" ) {
url="$blogURL" }
else {
url="$blogURL/category/"+catname
}
-- Allen
sharps wrote:
Bear with me - it's been a while since I hacked JavaScript.
Pre Roller 3.0 I had some JavaScript :
function selectCategory(catname) {
var url;
#set( $blogURL = "$baseURL/page/$userName" )
if (catname == "All" ) {
url="$blogURL" }
else {
url="$blogURL/?catname=/"+catname
}
window.location.replace ( url );
}
using the new macros I should use :
url="$url.category (catname)"
unfortunately that doesn't work - maybe something to do with the evaluation
order ?
Any ideas how to code such an expression ?