28
A
回答
49
6
該宏提供一種更簡單的方式做三元操作:
<#macro if if then else=""><#if if>${then}<#else>${else}</#if></#macro>
它易於使用,看起來不錯,相當的可讀性:
<@if someBoolean "yes" "no"/>
需要注意的是@if
- 而不是內置指令中的#if
。這裏是一些更多的例子。
<!-- `else` is optional -->
<@if someBoolean "someBoolean is true"/>
<!-- expressions -->
<@if (someBoolean||otherBoolean) "hello,"+user.name 1+2+3 />
<!-- with parameter names -->
<@if someBoolean then="yes" else="no" />
<!-- first in list? -->
<#list seq as x>
<@if (x_index==0) "first" "not first"/>
<#list>
由於某些原因,如果它們是非布爾表達式,不能在無名參數周圍添加括號。這可能會提高可讀性。
1
您可以自定義一個函數if
即宣告像這樣:
<#function if cond then else="">
<#if cond>
<#return then>
<#else>
<#return else>
</#if>
</#function>
功能可以在任何${...}
表達式中使用。您的代碼看起來像這樣:
<a href="${if(a, 'a.htm', 'b.htm')}">
相反@kapep,我認爲你應該使用的函數,而不是宏。 宏產生(文本)輸出,而函數返回的值可以分配給變量,但也寫入輸出,因此使用函數更靈活。此外,應用函數的方法更接近於使用三元運算符,它也可用於${...}
表達式中,而不是作爲指令使用。
例如,如果您需要有條件的鏈接目標多次,這將使意義將其分配到一個局部變量:
<#assign targetUrl=if(a, 'a.htm', 'b.htm')/>
<a href="${targetUrl}">link 1</a>
...
<a href="${targetUrl}">link 2</a>
使用功能,而不是宏觀的,@ kapep的例子會是什麼樣子這個:
<!-- `else` is optional -->
${if(someBoolean, "someBoolean is true")}
<!-- expressions -->
${if(someBoolean||otherBoolean, "hello,"+user.name, 1+2+3)}
<!-- with parameter names: not possible with functions,
but also not really helpful -->
<!-- first in list? -->
<#list seq as x>
${if(x_index==0, "first", "not first")}
<#list>
3
從FreeMarker 2.3.23開始,你可以寫a?then('a.htm', 'b.htm')
。 condition?then(whenTrue, whenFalse)
優於condition?string(whenTrue, whenFalse)
的優點是它適用於非字符串whenTrue
和whenFalse
,並且它僅評估whenTrue
和whenFalse
表達式(無論哪個分支被選中)之一。
相關問題
- 1. &&使用三元運算符
- 2. 使用三元運算符
- 3. 使用在三元運算符PHP
- 4. 在三元運算符內使用
- 5. 使用三元運算符,而在Perl
- 6. 三元運算符
- 7. 三元運算符用法?
- 8. 三元運算符用法
- 9. 三元運算符在foreach
- 10. 使用三元運算符分配?
- 11. 使用三元邏輯運算符「?:」
- 12. 使用C#三元運算符
- 13. java - 使用三元運算符
- 14. 使用三元運算符時出錯
- 15. 使用Javascript的三元運算符
- 16. 如果使用三元運算符 - Verilog
- 17. 如何在字符串中使用運算符三元組?
- 18. 在變量字符串中使用三元運算符
- 19. 在handlebars.js中有三元運算符嗎?
- 20. 三元運算符在php中?
- 21. 三元運算符作爲C宏中三元運算符的操作數
- 22. 執行三元運算符
- 23. 關於三元運算符..!
- 24. C三元運算符
- 25. 替代三元運算符
- 26. Ruby三元運算符
- 27. java三元運算符
- 28. 三元運算符C
- 29. 三元運算符連接
- 30. 三元運算符問題
嘗試var url =(a?a.htm:b.htm).............. –
正如下面所說的,你可以使用'?string',但是'a'的值究竟是什麼?你想測試它是否存在,或者它是否爲布爾「真」? – ddekany