我正在使用Ember 3.16.3,我得到这个错误的以下代码:
错误:Assert失败:必须将函数作为第二个参数传递给on
修饰符
//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 ...
}
}
1条答案
按热度按时间6ovsh4lw1#
正如错误中所指定的,
on
修饰符应该接收一个有效的函数来执行。如果将
{{action}}
帮助器添加到任何HTML DOM元素,则当用户单击该元素时,命名的事件将被发送到模板的相应组件或控制器。这适用于
on
修饰符或模板中使用的任何值。你可以把路由看作是我们为相应页面获取数据的一部分。任何其他支持属性或计算都必须在模板中使用的控制器或组件内部定义。因此,将
login
动作移到Controller上就可以解决这个问题。另外,您还需要将email
移到控制器上,否则您将无法看到它的更新正常工作。