迁移到 Ember octane 后出现错误

Getting error after migrating to Ember octane

我正在使用 Ember 3.16.3,但在以下代码中出现此错误:

Error: Assertion Failed: You must pass a function as the second argument to the on modifier

//login.hbs

 <form {{on "submit" this.login}}>
       <Input type="email" placeholder="email" @value={{this.email}} />
      <button type="submit">login</button>
 </form>

.

//login.js

import Route from '@ember/routing/route';

import { tracked } from '@glimmer/tracking';
import { action } from '@ember/object';

export default class LoginRoute extends Route {

   @tracked email = '';

   @action
   login(event) {
     event.preventDefault();

     // do some operations ...
  }
}

如错误中所指定,on 修饰符应收到要执行的有效函数。如guides

中所述

If you add the {{action}} helper to any HTML DOM element, when a user clicks the element, the named event will be sent to the template's corresponding component or controller.

这适用于 on 修饰符或模板中使用的任何值。您可以将路由视为我们为相应页面获取数据的一部分。任何其他支持 属性 或计算必须在要在模板中使用的控制器或组件内定义。

因此,将您的 login 操作移动到 Controller 将解决此问题。此外,您还需要将 email 移动到控制器,否则您将看不到它的更新正常工作。