1

我有一个 Freemarker 模板,其中涉及“LocalTime”和“ServerTime”两次。如果我可以从数据中确定用户的 LocalTime,我需要使用“LocalTime”和 sort_by 它,否则我需要 sort_by ServerTime。整个数据存在于列表中(来自记录)

原来使用 ServerTime 是可以的,功能是这样的:

<#list x.data.record?sort_by("ServerTime") as s>

但是如果我想检查是否有 "LocalTime" ,该怎么做呢?

我期待有什么东西在排队。。

<#list x.data.record?sort_by("ServerTime||LocalTime") as s>

(请注意,这与对两列进行排序不同)

4

2 回答 2

4

?sort_by不能这样做。这将需要自定义比较器功能,但 ?sort_by(myComparatorFunction)不支持 ATM。

如果你不能将已经排序的列表添加到数据模型中,或者你只想触摸表示层,你仍然可以TemplateMethodModelEx在Java中编写一个返回排序列表,并将其拉入模板中'<#assign sortByTime = com.example.SortByTimeMethod'?new()>,然后你可以写<#list sortByTime(x.data.record) as s>

于 2013-01-15T19:44:27.333 回答
2

我仍然是freemarker的新手,但我相信我刚刚为自己解决了这个问题。它丑陋,但它有效。大多数时候我不会处理数千甚至数百行,因此效率不是这种情况下的大问题。NetSuite 是注入 Freemarker 的系统,它有点痛苦。

本质上,我遍历列表一次并将一个值或另一个值(服务器/本地时间)存储到单个变量中(invoiceDate在我的情况下)。然后,我将该变量与我需要的其他显示变量一起放入哈希中。然后该哈希是列表中的一行。

显示:我遍历列表,该列表按我的invoiceDate变量和每一行(散列)排序,我从该键/值对中打印出我需要的信息。

我知道这是 4 年前的事了,但今晚我需要一个答案,直到我这样想才找到答案……希望这对下一个人有帮助!

<#assign y=[]>  
  <#list record.lines as tmpLine>

    <#assign invoiceDate = tmpLine.datecol>
    <#if (tmpLine.someIdentifyingMarker != "")>
        <#assign invoiceDate = tmpLine.custbody_p_ending_date>
    </#if>

    <#assign dataLine = {"displayDate":invoiceDate, "Description":tmpLine.description, "CheckNum":tmpLine.custbody_checknumprint, "InvoiceAmount":tmpLine.charge,"Credit":tmpLine.payment,"Remaining":tmpLine.amountremaining,"Balance":tmpLine.balance}>
    <#assign y = y+[dataLine]>

    </#list>

<#list y?sort_by('displayDate') as line><tr>


    <td colspan="4">${line.displayDate}</td>
    <td colspan="10">${line.Description}</td>
    <td colspan="4"><span style="background-color: rgb(255, 255, 255);">${line.CheckNum}</span></td>
    <td align="right" colspan="5">${line.InvoiceAmount}</td>
    <td align="right" colspan="4">${line.Credit}</td>
    <td align="right" colspan="4"><span style="text-align: -webkit-right; background-color: rgb(255, 255, 255);">${line.Remaining}</span></td>
    <td align="right" colspan="5">${line.Balance}</td>
    </tr>
    </#list></table>
于 2017-07-06T04:36:44.850 回答