我正在尝试为我的表单字段创建一个构建器,并且我提供了类似的东西:
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"
使用这些字段时,我意识到cell
和fruits
分享了drinks
。我知道这是正常的行为,但有没有办法让这个内部对象cell
是非静态的?
修改
我尝试了以下操作,但它有相同的行为:
class Select(name:String) {
class ReqVar extends RequestVar("all")
val cell = new ReqVar
/* Do some stuff with name and cell */
}
答案 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")