[
https://issues.apache.org/jira/browse/FREEMARKER-61?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16085076#comment-16085076
]
Ondra Žižka commented on FREEMARKER-61:
---------------------------------------
{{ObjectConstructor}} - ok, {{?new}} is good enough. It's just that I wouldn't
have to register the {{comparer}}.
{quote}Why do you want unwrapping per item to be the default? Also, why do you
want it to a be an option exposed to the caller? When would you use true or
false, as a template author?{quote}
As I wrote, rule of least surprise. As you wrote, if the items were not
scalars, they would have to be unwrapped anyway. And typically when reaching to
{{Comparator}} rather than just {{?sort_by}}, you will probably go deeper in
the model. But I don't have a strong opinion on this.
{quote}I just realize you don't want unwrapping per item, you want the models
to be passed to the Comparator.{quote}
Yes :) Regarding performace, I assumed getting the wrapped object is just a
pointer dereference, so pretty quick, and it gives you another model, and you
have to unwrap again. Seems I got that wrong :) So unwrapping beforehand makes
more sense.
The idea with checking the parameters of Comparator is nice. Much more elegant.
> ?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)