2

我循環這樣的變量PlayFramework 2.1.2喜歡的東西isFirst/isLast會在PlayFramework 2.x的模板

@for(l: Lang <- Globals.availableLangs) { 
    @if(l != ctx.lang) { 
     <a ng-click="i18nManager.changeLanguage('@l.code')" prevent-default href="#">@Messages("global.footer.langChange." + l.code.replace("-","_"))</a> 
    } 
    } 

我想通過循環添加的每個「a」生成之間&nbsp;&middot;&nbsp;。在PlayFramework 1.x中,我們有_isFirst_isLast{list}標記。我怎麼在Play Framework 2.x中做到這一點?

我需要的是這樣的:

@var first = true 
    @for(l: Lang <- Globals.availableLangs) { 
    @if(!first) { &nbsp;&middot;&nbsp; @first = false} 
    @if(l != ctx.lang) { 
     <a ng-click="i18nManager.changeLanguage('@l.code')" prevent-default href="#">@Messages("global.footer.langChange." + l.code.replace("-","_"))</a> 
    } 
    } 

回答

1

如果您需要訪問的第一和最後一個元素,你可以隨時使用headlastImmutable List API找到。爲了避免再次重複頭部,只需遍歷列表的tail

@defining(@Globals.availableLangs.filterNot(_ == ctx.lang).head){ l => 
    <a ng-click="i18nManager.changeLanguage('@l.code')" prevent-default href="#">@Messages("global.footer.langChange." + l.code.replace("-","_"))</a> 
} 
@for(l: Lang <- Globals.availableLangs.filterNot(_ == ctx.lang).tail) { 
     &nbsp;&middot;&nbsp; 
     <a ng-click="i18nManager.changeLanguage('@l.code')" prevent-default href="#">@Messages("global.footer.langChange." + l.code.replace("-","_"))</a> 
} 

編輯誤解你的意圖,更新以匹配它。

EDIT2增加了過濾器以消除條件檢查。

+0

感謝提醒我,我可以在模板上使用scala的所有功能!我完全忘記了這一點。我修改了這樣的代碼,它現在就是我想要的:'@for(l:Lang < - Globals.availableLangs.filterNot(_ == ctx.lang)){@@(Globals.availableLangs.filterNot(_ = = ctx.lang).head!= 1){  &middot;   } @Messages("global.footer.langChange." + l.code.replace("-","_")) }'如果您使用此代碼編輯您的帖子,我想將其標記爲已回答。 –

+0

@UmutBenzer我更新了我的代碼以像使用過濾器一樣使用過濾器,但我仍然會使用頭部/尾部方法而不是過濾列表以在每次迭代中檢查頭部。 – kingdamian42

相關問題