[英]Ember setupController hook in route disconnects model from template
我正在嘗試在輸入登錄路由后立即設置控制器屬性。 目前,我正在使用方法 1 ,它依賴於控制器中的init 。 它工作正常,但我的理解是最好在路由中使用 setupController 鈎子。 Ember 數據顯示已創建的記錄,並且在您鍵入時電子郵件和密碼字段會更新。
我試圖更改代碼,在路由中使用 setupController 鈎子(方法 2) ,而不是依賴控制器中的 init 。 使用這種方法,在進入路由時會創建新記錄,但在 Ember 數據中未定義電子郵件和密碼,並且在鍵入時不更新。
有沒有辦法在不斷開模型的情況下仍然可以使用 setupController?
方法 1 - 工作
路線/登錄.js
model: function() { return this.store.createRecord('authorisation'); },
控制器/登錄.js
setPreLoginMessage: function() { this.set('preLoginMessage', 'Please enter your username and password.')); }.on('init'),
模板/登錄.hbs
{{input placeholder="Email" value=model.email}} {{input placeholder="Password" value=model.password}}
方法 2 - 不工作
路線/登錄.js
model: function() { return this.store.createRecord('authorisation'); }, setupController: function(controller, model) { controller.set('preLoginMessage', 'Enter your username and password')); },
模板/登錄.hbs
{{input placeholder="Email" value=model.email}} {{input placeholder="Password" value=model.password}}
您正在覆蓋默認的setupController
功能,即:
setupController(controller, model) {
controller.set('model', model);
}
所以你要么只在setupController
使用這一行,要么更好,只需調用super.setupController(...arguments);
這將從您的基類運行代碼:
setupController: function(controller, model) {
super.setupController(...arguments);
controller.set('preLoginMessage', 'Enter your username and password'));
}
通常,當您覆蓋函數時,您應該始終考慮調用super.<method name>()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.