[ 
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)

Reply via email to