Нестатический внутренний объект в классе - PullRequest
1 голос
/ 25 марта 2012

Я пытаюсь создать конструктор для моих полей формы, и я получаю что-то вроде:

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 быть нестатичным?

EDIT

Я попробовал следующее, но у него такое же поведение:

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

Ответы [ 2 ]

1 голос
/ 25 марта 2012

Внимание, в документации Lift (2.4-M4) говорится о RequestVars (и SessionVars):

Если вы считаете необходимым создать подкласс RequestVar, в котором могутДля более чем одного экземпляра необходимо переопределить метод nameSalt (), чтобы он возвращал уникальное солт-значение для каждого экземпляра, чтобы предотвратить конфликты имен.

Так что вам нужно будет сделать что-то вроде этого:

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 */
}
0 голосов
/ 25 марта 2012

Что-то не так с

val cell = new RequestVar("all") 

...