输入登录路径后,我试图设置控制器属性。目前,我正在使用方法1,该方法依赖于控制器中的init。它工作正常,但我的理解是,最好在路由中使用setupController钩子。灰烬数据显示已创建的记录,并且在您键入时会更新电子邮件和密码字段。
我试图更改代码,在路由中使用setupController钩子(方法2),而不是依赖于控制器中的init。使用此方法,在输入路线时会创建新记录,但是Ember数据中未定义电子邮件和密码,并且在键入时不会更新。
有没有一种方法可以在不断开模型的情况下仍然使用setupController?
方法1-工作
路由/login.js
model: function() {
return this.store.createRecord('authorisation');
},
控制器/login.js
setPreLoginMessage: function() {
this.set('preLoginMessage', 'Please enter your username and password.'));
}.on('init'),
模板/login.hbs
{{input placeholder="Email" value=model.email}}
{{input placeholder="Password" value=model.password}}
方法2-不工作
路由/login.js
model: function() {
return this.store.createRecord('authorisation');
},
setupController: function(controller, model) {
controller.set('preLoginMessage', 'Enter your username and password'));
},
模板/login.hbs
{{input placeholder="Email" value=model.email}}
{{input placeholder="Password" value=model.password}}
最佳答案
您将覆盖默认的setupController
功能,即:
setupController: function(controller, model) {
controller.set('model', model);
}}
因此,您也可以在
setupController
中使用此行,或者更好的是,只需调用this._super();
即可运行基类中的代码:setupController: function(controller, model) {
this._super(...arguments);
controller.set('preLoginMessage', 'Enter your username and password'));
},
通常,您应该在覆盖函数时始终考虑调用
this._super()
。