簡體   English   中英

路由中的 Ember setupController 鈎子斷開模型與模板的連接

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM