1

最佳做法是什么?

这是我的 HTML:

<script type="text/x-handlebars">
    <div id="top-panel">
        <h1>{{title}}</h1>
    </div>
    <div id="wrapper">
        <div id="content">
            {{outlet}}
        </div>
    </div>
</script>

我应该在哪里设置 {{title}}?我发现有两种方法可以做到这一点......

第一的:

App.ApplicationRoute = Ember.Route.extend({
    setupController: function (controller) {
        controller.set("title", "Foo Bar")
    }
});

第二:

App.ApplicationController = Ember.ObjectController.extend({
    title: "Hello World"
});

哪一种是推荐的方法?

4

1 回答 1

1

如果它只是一个永远不会改变的静态东西,我会把它放在第二个,或者只是放在车把模板中。

此外

  1. 由于您没有在应用程序控制器上设置对象,因此实际上不需要扩展 ObjectController,您只需扩展 Controller。

    Ember.ObjectController is part of Ember's Controller layer. It is intended to 
    wrap a single object, proxying unhandled attempts to get and set to the 
    underlying content object, and to forward unhandled action attempts to its target.
    
  2. 将来,如果您要覆盖 setupController,通常建议调用 this._super(controller, model) ,例如:

    setupController: function (controller, model) {
       this._super(controller, model)
       controller.set("title", "Foo Bar")
    }
    

setupController 的默认实现是在控制器上设置内容,所以从技术上讲,你不调用 super 并没有什么区别。

对于动态标题,我会将其设为计算属性:

 App.ApplicationController = Ember.ObjectController.extend({
     title: function(){
        var currentdate = new Date(),
            title = "Awesome Title: " + currentdate.getDate() + "/"
            + (currentdate.getMonth()+1)  + "/" 
            + currentdate.getFullYear() + " @ "  
            + currentdate.getHours() + ":"  
            + currentdate.getMinutes() + ":" 
            + currentdate.getSeconds();

          return title;
     }.property()
 });
于 2013-10-18T10:02:07.103 回答