【问题标题】:Scala.js with angular type casting带有角度类型转换的 Scala.js
【发布时间】:2016-12-29 22:25:26
【问题描述】:

我正在尝试使用 Scala.JS 和 Angular 实现应用程序,但在提交表单时遇到了类型转换问题。

我有以下代码:

<div ng-controller="usersCtrl">
<form novalidate class="simple-form">
    First Name: <input type="text" ng-model="user.firstName" /><br />
    Last Name: <input type="text" ng-model="user.lastName" /><br />
    E-mail: <input type="email" ng-model="user.email" /><br />
    Password: <input type="password" ng-model="user.password" /><br />
    ConfirmPassword: <input type="password" ng-model="user.passwordConfirmation" /><br />
    <input type="submit" ng-click="controller.signup(user)" value="Save" />
</form>

@JSExport
@injectable("usersCtrl")
  class UsersCtrl(
  scope: UsersScope,
  proxy: UsersServiceProxy,
  val timeout: Timeout)
extends AbstractController[UsersScope](scope) {

  @JSExport
  def signup(user: UserSignup): Future[User] = {
    proxy.signup(scope.user)
  }
}


@JSExportAll
case class UserSignup(firstName: String, lastName: String, email: String, password: String, passwordConfirmation: String)

但是当我尝试提交表单时,我收到以下错误:

$c_sjsr_UndefinedBehaviorError {s$1: "An undefined behavior was detected: [object Object] is not an instance of rentalot.users.UserSignup", e$1: $c_jl_ClassCastException

我尝试了几个选项,包括通过范围获取用户,将用户变量定义为 UserSignup 或 UndefOf[UserSignup] 但没有运气。后者在我尝试执行 scope.user.toOption 时失败。

有什么想法吗?

【问题讨论】:

    标签: angularjs scala scala.js


    【解决方案1】:

    Scala.JS 无法自动将 JS 对象转换为 Scala 案例类。您需要定义一个外观。参考this document. 它应该看起来像这样:

    @js.native
    trait UserSignup extends js.Object { 
      def firstName: String = js.native
      def lastName: String = js.native
      ...
    }
    

    【讨论】:

    • 感谢您的回答,看起来很有希望。添加 @js.native 注释时出现以下错误。我通过这个项目使用 scala.js 版本 0.6.11:github.com/greencatsoft/scalajs-angular
    • 您遇到什么错误?注释导入对了吗?
    • 抱歉,错过添加。错误是:类型 native 不是包 scala.scalajs.js 的成员
    • 这很奇怪,你能在你的导入中添加import scala.scalajs.js 吗?
    • 这是因为 scalajs-stubs 没有实现 js.native 并且我将代码与 jvm 代码放在共享文件夹中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-10
    • 2017-02-08
    • 1970-01-01
    • 1970-01-01
    • 2018-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多