Как я могу динамически задать параметр фрагмента lift?


Есть ли способ динамически изменять параметры фрагмента?

Например, если я назову этот URL

host:port/a_page?name=myname

Я хотел бы, чтобы моя страница выглядела так:

<div class="lift:surround?with=default;at=content">
   <div class="lift:comet?type=MySnippet;name=myname" >
      ...
   </div>
</div>

Возможно ли это вообще? Я попытался использовать некоторый javascript, чтобы извлечь param из url и поместить его в атрибут class div, но в моем понимании это не сработает, потому что скрипты всегда будут выполняться после того, как платформа lift сделает это волшебство.

Заранее спасибо! Любая помощь есть действительно ценить.


Я использовал оба совета, чтобы заставить его работать, как аджантис упоминал, что чтение парама непосредственно из фрагмента является самым простым способом, но не работает в вызове кометы. Решение рогача работает.

Итак, решение таково:

<div class="lift:Ex.wrap">
  <div id="myid"></div>
</div>

def wrap = { 
val name = "lift:comet?type=MySnippet;name=" + S.param("name").openOr("...")            
"#myid" #> <div id="myid" class={name} ></div>
}
2 3

2 ответа:

Вы можете попробовать обернуть этот фрагмент кометы в другой фрагмент, который преобразует xml и добавляет этот name=myname в class. Например:

<div class="lift:Ex.wrap">
  <div class="lift:comet?type=MySnippet"></div>
</div>

class Ex {
  def wrap = { (n: NodeSeq) =>
    // example transformation
    // AntiXML syntax
    import com.codecommit.antixml._;
    val comet = n \ "div" head;
    val comet2 = 
      comet.copy(attrs = comet.attrs +
                         ("class" -> (comet.attrs("class") + ";name=myname")))
    n \ "div" updated (0, comet2) unselect
  }
 }

Почему бы просто не извлечь параметр http из процесса обработки фрагментов? то есть

def render = {
   val name = S.param("name").openOr("...")
....
}