我在想,Lift是否有一個迭代標籤(例如:for,foreach)? 當我使用JSP時,我可以輕鬆地迭代一個List,只需使用JSP,將對象傳遞給標記。類似於this或like this。 我知道這不是最好的例子,但你明白我的意圖。 總之,這是否與Lift存在,或者如果不存在,我將如何設法做這樣的事情?liftweb是否有迭代標籤?
我想要做的最後一件事是硬編碼html。
我在想,Lift是否有一個迭代標籤(例如:for,foreach)? 當我使用JSP時,我可以輕鬆地迭代一個List,只需使用JSP,將對象傳遞給標記。類似於this或like this。 我知道這不是最好的例子,但你明白我的意圖。 總之,這是否與Lift存在,或者如果不存在,我將如何設法做這樣的事情?liftweb是否有迭代標籤?
我想要做的最後一件事是硬編碼html。
簡而言之:No. Lift的設計嚴格地將邏輯與設計分開,並且禁止在模板標記中使用通用標籤。
查看view first article以查看lift如何處理迭代。
從文章中的一個例子:你的標記:
<table>
<lift:show.users>
<tr>
<td><f:first_name>David</f:first_name></td>
<td><f:last_name>Pollak</f:last_name></td>
</tr>
</lift:show.users>
</table>
您的代碼:
class Show {
def users(xhtml: NodeSeq): NodeSeq =
Users.findAll.flatMap(user =>
bind("f", xhtml,
"first_name" -> user.firstName,
"last_name" -> user.nameName
)
)
}
現在,看到標籤<lift:show.users>
呼籲與標籤的內容對應的方法時什麼提升呢作爲論據。標籤將被替換爲users
方法的返回值。
users
方法會遍歷所有Users
,對於每個用戶,它將bind
的值寫入內部xhtml
的第一個和第二個名稱的值。所有這些迭代然後連接(通過flatMap
)並返回。
當我開始舉起電梯時,我總是發現這種方法有點過於僵化;在這裏和那裏有一個微小的循環,怎麼可能會傷害?但現在我知道調用和從模板代碼創建您自己的片段是多麼容易,我無法想象使用任何類似jsp的東西了。它比較弱,混亂你的標記。當然,你失去了很多Scala的驗證能力。
注:
的模板標籤中填充內容的原因是設計的目的。在這種情況下,將在bind
期間替換虛擬變量和值。因此,模板設計人員可以使用或多或少有意義的內容來填充標籤,從而使編碼人員能夠更好地理解設計人員所考慮的語義。
感謝您的解釋和快速回復。 :) – ksemeks 2010-11-29 14:57:54