类中的非静态内部对象

时间:2012-03-24 23:15:51

标签: scala static lift

我正在尝试为我的表单字段创建一个构建器,并且我提供了类似的东西:

class Select(name:String) {
  object cell extends RequestVar("all")
  /* Do some stuff with name and cell */
}

val fruitsField = new Select("fruits")
val drinksField = new Select("drinks")

现在我能做到:

fruitsField.cell.set("tomato")
drinksField.cell.get // returns "tomato"

使用这些字段时,我意识到cellfruits分享了drinks。我知道这是正常的行为,但有没有办法让这个内部对象cell是非静态的?

修改

我尝试了以下操作,但它有相同的行为:

class Select(name:String) {
  class ReqVar extends RequestVar("all")
  val cell = new ReqVar
  /* Do some stuff with name and cell */
}

2 个答案:

答案 0 :(得分:1)

注意,Lift文档(2.4-M4)说明了RequestVars(和SessionVars):

  

如果您发现有必要创建一个可能有多个实例的RequestVar子类,则必须覆盖nameSalt()方法以为每个实例返回唯一的salt值以防止名称冲突。

所以你必须做这样的事情:

class Select(name:String) {
  val cell = new RequestVar("all") {
    override def __nameSalt = "select_cell_" + name
  }
  /* Do some stuff with name and cell */
}

当然,只有在每个请求只有一个具有给定名称的Select实例时,这才有效。

修改

根据您刚刚发布的内容

class Select(name:String) {
  class ReqVar extends RequestVar("all") {
    override def __nameSalt = "select_reqvar_cell_" + name
  }

  val cell = new ReqVar
  /* Do some stuff with name and cell */
}

答案 1 :(得分:0)

有什么问题
val cell = new RequestVar("all")