2011-08-02 102 views
5

試圖通過與Lift框架一起玩Scala開始,並且在創建我想象中的代碼時會遇到問題將代表一個常見場景:我列出了天和每天的物品列表(嵌套列表)。電梯(斯卡拉)嵌套片段(每天多個項目)

我的想法是,採取這種方式:

<div class="lift:DaySnippet"> 
    <h1 class="day">Name of Day</h1> 
    <ul class="day-items"> 
     <!-- wanted to have a separate snippet but haven't made it work --> 
     <!-- <li class="lift:DayItemSnippet">Item content</li> --> 
     <li class="item"> 
      <span class="name">Name</span> 
      <span class="desc">Description</span> 
     </li> 
    </ul> 
</div> 

本來我是不會有內部片段,但認爲是有意義的。

所以我可以定義這樣一個片段:

class DaySnippet { 
    // Ignoring that this is a stupid way to define the data 
    val days = ("Monday", ("Item 1", "Item 1 Description") :: Nil) :: 
     ("Tuesday", ("Item 2", "Item 2 Description") :: 
      ("Item 3", "Item 3 Description") :: Nil) :: Nil; 

    def render = { 
     // EDIT: Original code was broken, this is what I was trying to show 

     "* *" #> days.map { case (day, items) => ".day *" #> day } 
    } 
} 

無論如何,我正在尋找一些文件或任一嵌套片段的例子和/或如何遍歷嵌套集合,並使用CssSels來隨時修改整個NodeSeq。

我很樂意添加任何可能澄清的附加信息。

回答

6

,我想出了一些代碼,做什麼,我想,但我不知道它的最佳因此建議,歡迎:

class DaySnippet { 
    // Ignoring that this is a stupid way to define the data 
    val days = ("Monday", ("Item 1", "Item 1 Description") :: Nil) :: 
     ("Tuesday", ("Item 2", "Item 2 Description") :: 
      ("Item 3", "Item 3 Description") :: Nil) :: Nil; 

    def render = { 
     "* *" #> days.map { case (day, items) => 
      ".day *" #> day & ".item *" #> item.map { 
       case (name, desc) => 
        ".name *" #> name * ".desc *" #> desc 
      } 
     } 
    } 
} 
+0

你的代碼對我來說很不錯。這與我寫的相似。 –

0

這裏不錯discussion,使用S.attr獲取嵌套代碼片段的索引被描述。

+0

其實我碰到這個討論中來了,但我想用CssSel代替綁定。 –

+1

我強烈建議不要在這種情況下使用S.attr。原始海報的代碼是正確的方法。 –