3

有没有办法可以动态修改片段的参数?

例如,如果我调用这个 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 来从 url 中提取参数并将其放入class属性中,div但据我了解,这是行不通的,因为脚本将始终在 Lift 框架执行之后执行,这很神奇。

提前致谢!非常感谢任何帮助。


我使用了提供的两个技巧来使其工作,就像 ajantis 提到的直接从片段中读取参数是最简单的方法,但在彗星调用中不起作用。Rogach 解决方案有效。

所以解决方案是:

<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>
}
4

2 回答 2

3

为什么不直接在片段处理中提取 http 参数?IE

def render = {
   val name = S.param("name").openOr("...")
....
}
于 2012-07-24T07:42:32.973 回答
2

您可以尝试将该彗星片段包装在其他片段中,这将转换 xml 并将其添加name=mynameclass. 像:

<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
  }
 }
于 2012-07-24T06:30:48.637 回答