用渲染助手继承单个控制器



我试图为一组对象(对话)呈现一组选项卡,使用每个对象的呈现帮助器。它不是路由的一部分,因为它是接口的持久部分。我遇到了一个问题,只有与模型同名的视图才能获得预期的控制器(即面板内容而不是选项卡标题)。

我有一个聊天模型,对象控制器和数组控制器(这里故意简化):

App.Chat = DS.Model.extend({ });
App.ChatsController = Ember.ArrayController.extend({
  needs: 'application',
  content: Ember.computed.alias('controllers.application.currentChats'),
});
App.ChatController = Ember.ObjectController.extend({ });

ArrayController需要need/content属性,因为聊天记录是在应用程序控制器中加载的。我使用currentChats的名称,因为其他路由可能会加载非当前聊天。

App.ApplicationController = Ember.Controller.extend({
  init: function(){
    this.store.find('chat', {"current": true});
    this.set('currentChats', this.store.all('chat'));
  }
});

我毫不费力地用适当的控制器呈现聊天内容(到'chat'模板中)。然而,聊天选项卡被赋予了默认的ObjectController,因此不能触发动作。

<script type="text/x-handlebars" id="application">
    <!--application template-->
    {{outlet chats}}
</script>
<script type="text/x-handlebars" id="chats">
<div id="chats">
  <ul id="chat-tabs">
    {{#each}}
        {{render 'chatTab' this}}
    {{/each}}
  </ul>
  {{#each}}
    {{render 'chat' this}}
  {{/each}}
</div>
</script>
<script type="text/x-handlebars" id="chatTab">
<!--tab template-->
</script>
<script type="text/x-handlebars" id="chat">
    <!--chat template-->
</script>

应用路由器如下:

App.ApplicationRoute = Ember.Route.extend({
    model: function(){ },
    renderTemplate: function(){
        this.render('application', { });
        this.render('chats', {
            into: 'application',
            outlet: 'chats',
            controller: 'chats'
        });
    }
});

这似乎完全归结为模板的命名。名为"chat"的模板继承了正确的控制器,但chatTab没有,尽管它接收了一个聊天作为模型。有没有办法强制视图继承正确的控制器?或者我是在用一种特殊的方式来做这件事吗?

非常感谢你对这个烬新手的帮助。

安德鲁

它完全脱离提供给渲染的名称。最简单的方法是创建另一个控制器并扩展聊天控制器。

App.ChatTabController = App.ChatController.extend();

最新更新