[英]Ember.js Layout
我剛剛對ember.js感到滿意,並希望使用它創建一個單頁應用程序。 由於應用程序的性質,在某些時候我將有多個“主要”布局。
用戶登錄到應用程序后,我需要基於ajax調用顯示用戶名。 我還不了解如何在ember.js中最好地實現這一點,因為(至少對我而言)這不在任何視圖層次結構之內。
我使用了render方法的“ into”選項。
App.TestRoute = Ember.Route.extend({
renderTemplate: function(controller, model) {
this.render('layout');
this.render('test',{
into: 'layout'
});
},
});
我認為這也會調用布局路線並加載其模型。 不幸的是它沒有那樣做。
我用{{yield}}指令定義了一個布局
<div>
<div class="container" id="header">
{{loginUser.userName}}
</div>
<div class="container" id="main-content">
{{yield}}
</div>
<div class="container" id="footer">
Just some static footer
</div>
</div>
我的看法像
App.TestView = Ember.View.extend({
layoutName: 'layout'
});
渲染工作正常,但是我看不到可以最好地注入用戶數據的位置。 理想情況下,這對於使用此布局的所有視圖應該是透明的。 所以我的想法是使用繼承,但是還沒有找到可行的解決方案。
我在這里完全偏離軌道嗎,或者這在某種程度上有意義?
UPDATE
我將示例放在這里: http : //jsfiddle.net/Efz8N/4/
布局由控制器支持,該控制器使用布局支持視圖。
loginUserFullName:function(){
return this.get('controllers.application.loginUser') || 'not in';
}.property('controllers.application.loginUser')
這就是我現在的做法。 我創建了一個混合器,可以在任何使用布局的控制器中使用。 這樣,我至少不必多次執行此操作:
App.LayoutHandler = Ember.Mixin.create({
loginUserFullName: function() {
var name = App.get("loginUser")?App.get("loginUser"):"";
return name;
}.property("App.loginUser"),
});
App.IndexController = Ember.Controller.extend(App.LayoutHandler, {
});
下面是一個示例: http : //jsfiddle.net/Efz8N/6/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.