如何从电梯中的不同包中调用小部件?

时间:2013-05-08 19:00:40

标签: scala reflection lift

我试图调用两个具有相同名称和相同类的片段方法之一,但这些片段位于不同的包中。这是示例代码:

摘录1:

package v1.site.snippet

class TestSnippet {

  def test = { println("printed from v1") }

}

摘录2:

package v2.site.snippet

class TestSnippet {

  def test = { println("printed from v2") }

}

的index.html:

<div class="lift:TestSnippet.test"></div>

那么如何告诉index.html要调用哪个TestSnippet.test?这两个软件包都已添加到我的Boot.scala中。

1 个答案:

答案 0 :(得分:3)

一个选项:

LiftRules.snippetDispatch.append {
  case "V1TestSnippet" => new v1.site.snippet.TestSnippet
  case "V2TestSnippet" => new v2.site.snippet.TestSnippet
}

然后,您的代码段必须继承DispatchSnippet并定义def dispatch = { case "test" => test _ }等。然后,您可以从V1TestSnippetV2TestSnippet调用模板中的代码段。

或者,类似

LiftRules.snippets.append {
  case "V1TestSnippet"::"test"::Nil => (new v1.site.snippet.TestSnippet).test _
  case "V2TestSnippet"::"test"::Nil => (new v2.site.snippet.TestSnippet).test _
}

我相信List是模板中分割点的片段名称。