0
我有一個Ember.js,我希望在應用模板(或部分模板)上有一個菜單「bar」。該菜單是通用的,但有一些選項/屬性應該由路由器或控制器控制,例如,某些路由(如登錄)不應顯示「返回」按鈕。在路由器/控制器級別可配置的應用級菜單
我也希望避免在路由器或控制器級別的樣板,但我發現我設計的解決方案並不理想。下面是我所做的:
controllers/application.js:
showBackButton: function() {
var v = this.controllerFor(this.currentRouteName).get('showBackButton');
return (Ember.isEmpty(v) ? true : v);
}.property()
而且,因爲模板不會路由變化之間更新:
routes/application.js:
didTransition: function() {
this.controller.propertyDidChange('showBackButton');
return true;
}
這讓我在控制器定義了一個新的屬性值,它的工作原理。但我有2個問題:
- Ember 1.7顯示了controllerFor方法的棄用警告,我明白新的「需要」功能正在取代,但在這種情況下是什麼替代品!?
- 只有最深的控制器才能擁有該屬性,不管怎樣,我應該橫切控制器的層次結構,直到找到它。
有沒有更好的方法,而無需向每個模板/控制器添加代碼或使用基類?
那麼,這是我最初的,但它需要我把邏輯放在控制器(didTransition),這是我想避免的事情之一。如果邏輯改變,我需要修補每一個用法或代碼。此外,它仍然使用您的示例代碼中的controllerFor實際上可以遷移到使用* needs *屬性。 – 2014-10-29 14:14:38
@AlexandreGomes你擁有路線中的邏輯,而不是控制器!你需要'controllerFor',因爲你沒有'需要'的路線。如果你想要一個單一的代碼,使用混合! – Lux 2014-10-31 12:23:16