迁移到 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
移动到控制器,否则您将看不到它的更新正常工作。
我正在使用 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
移动到控制器,否则您将看不到它的更新正常工作。