繁体   English   中英

Ember.js布局

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

布局由控制器支持,该控制器使用布局支持视图。

http://jsfiddle.net/WHvCZ/

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM