2016-07-23 61 views
0

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

我试图改变代码,在路径(方法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}}

回答

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()当你重写功能。

+0

谢谢,我添加了这行** this._super(controller,model); **,它的效果很好。 – AJP

相关问题