路由中的Ember setupController挂钩将模型与模板

时间:2016-07-23 16:44:08

标签: javascript ember.js

我尝试在输入登录路由后立即设置控制器属性。目前,我正在使用方法1 ,它依赖于控制器中的 init 。它工作正常,但我的理解是在路由中使用setupController挂钩更好。 Ember数据显示已创建的记录,并在您键入时更新电子邮件和密码字段。

我试图更改代码,在路径(方法2)中使用setupController挂钩,而不是依赖于控制器中的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}}




1 个答案:

答案 0 :(得分:3)

您正在覆盖默认的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()