[
https://issues.apache.org/jira/browse/FREEMARKER-61?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16083372#comment-16083372
]
Ondra Žižka commented on FREEMARKER-61:
---------------------------------------
The Java method as you suggest is a good idea. I didn't think of putting the
comparator to the model.
I agree that for non-java users, {{?sort_using(Comparator)}} would not be too
useful.
And as you say, it could accept a function, but that would be really crazy :) I
mean, it would do the job, but unless users desperately cry for it, I wouldn't
do that.
Originally I wanted to suggest {{?sort_by(Comparator)}} - would that be less
obtrusive? Basically no new syntax/built-in, just a support for a new parameter
type. But then I changed to {{sort_using}} because the name wouldn't match.
Now thinking about it, couldn't it be {{?sort(Comparator)}} - an optional
argument? Maybe that would be the best.
> ?sort_using with a Comparator parameter
> ---------------------------------------
>
> Key: FREEMARKER-61
> URL: https://issues.apache.org/jira/browse/FREEMARKER-61
> Project: Apache Freemarker
> Issue Type: New Feature
> Components: engine
> Affects Versions: 2.3.26-incubating
> Reporter: Ondra Žižka
>
> Hi Daniel :)
> I know that lists should be sorted before passing them to the template in
> general.
> In our case, the template is backed by a generic API for graph database which
> gives an {{Iterable}} for any 1:N relation. So sorting needs to happen in the
> template.
> Now I'd like to sort that, for which the {{?sort_by(["...", "..."])}} is good
> enough, except when it gets a bit more complicated - e.g. sometimes the
> values are missing in which case it should sort by something else...
> Doing that in a template is not a good idea, so I suggest this, elegant in my
> opinion, solution:
> First you'd have a Comparator in Java, and perhaps register it like you do
> with {{FreemarkerMethod}}.
> Then you could pass this as a parameter to {{?sort_using.}}
> {code}
> public class SortByName implements Comparator { ... }
> myData.persons?sort_using("SortByName")
> {code}
> This would be even better if it could pass parameters to the constructor:
> {code}
> public class SortByName implements Comparator {
> public SortByName(boolean ladiesFirst) { ... }
> }
> myData.persons?sort_using("SortByName", [true])
> {code}
> This would greatly leverage sorting in templates while not complicating the
> template syntax or cluttering {{?sort_by}}.
> Thanks for considering.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)