【问题标题】:Create sub controller without route in Ember.js在 Ember.js 中创建没有路由的子控制器
【发布时间】:2014-04-07 08:19:13
【问题描述】:

我正在使用 ember.js 构建一个聊天应用程序(我对它很陌生),它具有以下细节:

  • 每个用户都有多个线程,每个线程只涉及两个用户
  • 我需要以“facebook”的方式显示线程和消息,同时将线程列表和消息放在一边
  • 每条消息都有我需要处理的已读状态
  • 该应用程序可使用/:thread_id 等网址格式

给你这些,我已经设置了一个应用程序 https://gist.github.com/Fed03/33da4a7c28c792af23cf(为了您的可读性,我已经合并了各种 js 文件)但是问题出现在特定的消息状态。
根据我对 ember 的了解,evrything “需要”一条路由来代理事物,但是如果您查看代码和细节,则不需要 message 路由,但我需要 MessageController 来管理单个消息状态。

显然我在这个应用程序的架构上做了一些非常错误的事情,所以如果有人愿意给我一些建议会很棒!
提前谢谢!

【问题讨论】:

    标签: javascript ember.js


    【解决方案1】:

    您需要使用{{render}} helper

    不是在线程模板中渲染每个模型,而是将模型传递给{{render}} 并让它处理显示消息,它会有自己的控制器。

    您需要为 msg 创建一个单独的模板,如下所示:

    <script type="text/x-handlebars" data-template-name="message">
        <div class="col-md-12">
            <div class="well">
                 <div class="message-header">
                     <h5>{{user.fullname}}</h5>
                 </div>
                     {{body}}
                     {{isRead msg}}
            </div>
        </div>
    </script>
    

    然后将您的线程模板更改为:

    <script type="text/x-handlebars" data-template-name="thread">
        {{#each msg in model.messages}}
            {{render 'message' msg}}
        {{/each}}
        <div class="col-md-12">
            <div class="row">
                <div class="col-md-5">
                    {{textarea value=message rows="3" class="form-control" data-thread=model}}
                    <div>
                        <button class="btn btn-primary pull-right" {{action 'send' model}}>
                            Submit
                        </button>
                    </div>
                </div>
            </div>
        </div>
    </script>
    

    然后每个msg 都会有它自己的MessageController 实例,您可以使用它来处理它的状态。

    【讨论】:

    • 这并不能回答我关于如何在没有消息路由/控制器的情况下管理每条消息的状态和变量的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-11
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多