【问题标题】:Scala Play 2.8 FieldConstructor type and IntelliJ: Cannot resolve symbol fScala Play 2.8 FieldConstructor 类型和 IntelliJ:无法解析符号 f
【发布时间】:2020-11-24 00:05:46
【问题描述】:

我正在尝试使用 documentation 为 Play 2.8 编写自己的自定义字段构造函数。

按照文档,我创建了这个相同的示例构造函数:

@(elements: helper.FieldElements)

<div class="@if(elements.hasErrors) {error}">
    <label for="@elements.id">@elements.label</label>
    <div class="input">
        @elements.input
        <span class="errors">@elements.errors.mkString(", ")</span>
        <span class="help">@elements.infos.mkString(", ")</span>
    </div>
</div>

我将其命名为app/views/myFieldConstructor.scala.html。 (我之前曾尝试将其命名为 myFieldConstructor.f;play 的文档在这里不是很好。)

然后,我在其他地方创建了一个名为 app/forms/auth/AuthFieldConstructor 的 scala 对象:

package forms.auth

import views.html

object AuthFieldConstructor {
  import views.html.helper.FieldConstructor
  implicit val myFields: FieldConstructor = FieldConstructor(html.myFieldConstructor.f)
}

我的 IDE 抱怨找不到f,它还推断出类型 html.myFieldConstructormyFieldConstructor.type

能够在我的其他模板中@import forms.auth.AuthFieldConstructor._,代码编译并呈现表单,但我的 IDE 没有正确推断这一点。

再探索一下,这段代码仍然可以编译,但 f 仍然无法识别:

object AuthFieldConstructor {
  import views.html.helper.FieldConstructor
  val fieldConstructor: myFieldConstructor.type = html.myFieldConstructor
  implicit val myFields: FieldConstructor = FieldConstructor(fieldConstructor.f)
}

我之前遇到过.type,忘记应用对象时,但在此处添加apply() 并没有帮助。有什么想法可以让我的 IDE 识别这里发生的事情吗?

我关闭了 Scala 编译服务器。我正在使用 sbt shell 进行项目重新加载和构建。我选中了“为此项目使用 Play 2 编译器”。 Scala 2.13.3、sbt 1.3.13、Play 2.8.2。

【问题讨论】:

    标签: scala intellij-idea playframework sbt


    【解决方案1】:

    我不太确定类型推断怪异的答案,但我能够让 IDE 停止抱怨,首先通过从 old PR 中获取线索来更改字段构造函数的 scala 对象代码帮手:

      implicit val authFieldConstructor = new FieldConstructor {
        override def apply(elements: FieldElements): Html = myFieldConstructor(elements)
      }
    

    后来进行了几次 IDE 转换,我最终得到了更清洁的工具:

      implicit val authFieldConstructor: FieldConstructor = (elements: FieldElements) => myFieldConstructor(elements)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-20
      • 2016-11-20
      • 1970-01-01
      • 2014-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多