Road to Ember 2.0 - 高级 Ember 应用程序结构反馈?

2023-12-13

我发现我正试图在一个特别波动的时期开始学习 Ember。最近的“Road to 2.0”博客文章帮助我明确了前进的方向,但我正在努力在高水平上验证我对 Ember 的方法。

我想对人们的时间敏感。我的完整代码适合有兴趣提供更具体反馈的任何人(很乐意),但是我最感兴趣的是关于我的应用程序结构和我对 Ember 功能的利用的高级反馈。

应用背景:

我正在开发一个用户对多聊天短信应用程序。从视觉上看,每个用户都有多个聊天窗口(一个Conversation)打开消息(Message)特定于Profile消息历史记录。支持的 Rails 向目标发送消息Profile。这个项目正在开发中。

关键问题:

  • 将模型与组件关联的最佳方式是什么?我将每个对话模型传递给对话组件。随着我的组件逻辑与视图的集成如此紧密,组件类似乎在 UI 之外承担了太多的责任。我开始添加有关 UI 如何冒泡到模型的逻辑,但想知道是否有更好的方法。
  • 由于我脱离了数组控制器的代理行为,我发现自己通过以下方式引用我的模型集合this.get('content')- 有没有更好的方法来处理对话的集合?
  • 最后,为了调用组件中的操作,我读过使用Ember.Eventedmixin 来触发和观察事件。 IE。当用户尝试打开配置文件的聊天窗口且该聊天已打开时,我想闪烁目标聊天窗口。这是在“2.0 之路”背景下管理这些交互的好方法吗?
  • 将事件从控制器传递到控制器怎么样?Message子组件?消息子组件将绑定到每个消息的状态(成功、失败等)。我想我只是将一些消息显示绑定到记录的状态和状态属性。有什么办法我可以做得更好吗?

我非常乐于接受反馈。严厉一点! :)

高级代码:

(完整代码)

ChatApp.Router.map(function () {
  this.resource('conversations', { path: '/' });
});

ChatApp.ConversationsRoute = Ember.Route.extend({
  model: function () { //this is a collection of active conversations
  },
  activate: function() { //listens to event stream
  }
});

ChatApp.ConversationsController = Ember.Controller.extend({
  actions: {
    openChat: function(user_id, profile_id){ //open chat if one isn't open.
    }
  },
  removeExcessChats: function(){ // removes chats that don't fit in window
  },
});

ChatApp.ConversationHolderComponent = Ember.Component.extend({
  actions: {
    markInactive: function(){
      // referencing a passed in conversation is the only way I know to reference the model.
      this.get('conversation').markInactive();
    },
    createMessage: function(){
    }
  },
  isFlashed: false
});

组件模板:

<script type="text/x-handlebars" data-template-name="components/conversation-holder">
  <button {{action "markInactive"}}>close</button>
  <h3>Profile: {{conversation.profile}} Conversation: {{conversation.id}}</h3>
  <ul class="list-unstyled">
    {{#each message in conversation.messages}}
      <li><strong>{{message.type}}</strong> {{message.body}}</li>
    {{/each}}
    <li>
      <form class="form-inline" {{action "createMessage" on="submit"}}>
        {{input class="message_body" placeholder="Start typing a message..." value=conversation.new_message_body type="text"}}
        {{input class="btn" type="submit" value="Send"}}
      </form>
    </li>
  </ul>
</script>

<script type="text/x-handlebars" data-template-name="conversations">
  <section id="todoapp">
    <header id="header">
      <h1>Chat Messaging</h1>
    </header>
  </section>

  <section id="main">
    <p>Open a new chat with profile id #1 <a href="#" {{action "openChat" 1 1}} >Open w/ profile 1</a> | <a href="#" {{action "openChat" 1 6}} >open profile already in convo</a></p>

    <ul id="chat-app"  class="list-unstyled clearfix">
      {{#each conversation in model}}
        <li>{{chat-holder conversation=conversation}}</li>
      {{/each}}
    </ul>
  </section>
</script>

我没有仔细研究你的应用程序设计,但我是根据你提到的更一般的 Ember 概念来回答的。

1.

Ember 中并没有真正的模型对象。您有一条路线模型挂钩返回你想要的任何内容你的模型。它可以是字符串、数组或只是一个数字。

当您使用 Ember Data 时,模型挂钩会返回 Ember Data 对象。

组件可以接收任何对象作为其模型/内容。因此,关联模型和组件没有最好或最差的方法,您只需传递它需要的东西即可。

2.

如果您的组件开始变得太大,您可能应该将其拆分为两个或更多组件。让一个组件的模板渲染其他组件并没有什么问题。

此外,如果您的逻辑在许多组件之间共享,您可以将其重构为 mixin 并将其包含在每个组件中。

3.

您在控制器和组件之间传递消息的想法“可能”是正确的。 Ember 应用程序中的通常流程是事件向上和数据向下。由于控制器的级别高于组件,因此您无法向该方向发送事件,但通过更新绑定值,您可以将新信息传递给组件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Road to Ember 2.0 - 高级 Ember 应用程序结构反馈? 的相关文章

  • 根据grunt任务设置Env变量

    我有一个 web 应用程序 emberjs 我需要根据 grunt 任务设置环境变量 所以当我跑步时grunt server它会选择development 并且 url 将被设置为localhost 5000 但当我这样做时grunt bu
  • 标签中的 Ember 车把模板

    ember 特别是应用程序模板 是否可以在 head 标签内进行操作 以便动态更改标题标签 元标签 外部 css 样式表和 favicon 等内容 如果是这样 那么一种干净的方法是什么 为了完成这项工作 我所做的是创建车把助手 例如 如果您
  • 从模板访问模型

    在玩 ember 时 我发现有时模型存储在控制器的content属性 有时模型也可以直接在控制器上使用 然而 当这种情况发生时 我不明白 让我用一个我在组装 ember MVC 时发现的例子来解释一下 设置 A 开始 我定义了一个自定义Me
  • Ember.js 在特定页面上包含外部脚本

    我试图弄清楚如何包含外部 javascript 源 图表 但仅限于网站上的单个页面 可以在视图或模板中完成吗 我发现只需添加页面模板不起作用 如果我将它添加到整个网站的模板中 它加载得很好 但是它会加载到每个页面上 我的问题的另一面可能更具
  • 防止回车键触发按钮

    我有一个搜索输入框 当用户按下 Enter 时不需要执行任何操作 我正在使用 EmberJS 和 Jquery 以及以下代码 目前 它可以禁止触发弹出窗口 但由于某些原因 在 IE9 中 当按下 Enter 键时 切换按钮将成为焦点 在 C
  • Ember Data:重写 Save 方法

    您好 Ember 数据世界 我一直在研究自定义适配器 试图找出如何覆盖保存方法 根据我的理解 你似乎需要做这样的事情 DS RESTAdapter extend save function return this super 但是 当我尝试
  • 您可以预加载相关数据,以便将您的关系缓存在 ember-data 中吗?

    我有一个简单的 hasMany belongsTo 关系 如下所示 App Foo DS Model extend bar belongsTo bar async true App Bar DS Model extend foos hasM
  • Ember数据渲染有很多

    在我的 ember 应用程序中 我有一个模型 App Schedule DS Model extend manager DS belongsTo App Manager embedded true entries DS hasMany Ap
  • 如何将子记录添加到现有父记录中?

    我一直在 Google 和 Stack Overflow 上搜索有关这个主题的某种提示 但信息充其量是分散的 我正在尝试创建一个新的子记录 Comment 并将其保存到现有的父记录 Post 我使用的是 Ember Model 而不是 Em
  • 告诉 ember.js 对其模型的“id”使用不同的密钥

    我陷入了不应该回来的境地idAPI 端点中的字段 我需要告诉 ember 使用slug字段为 而不是id I tried DS RESTAdapter map App Post id key slug 虽然这对于App Post find
  • 对 EmberJS 对象的反思?如何在事先不知道密钥的情况下查找属性密钥列表

    如果您事先不知道所有密钥 是否有办法检索 EmberJS 对象的 set at creations 属性 通过检查器 我看到所有似乎存储在元对象中的对象属性values哈希 但我似乎找不到任何方法来恢复它 例如object getPrope
  • 使用 store.findQuery 时捕获 404 错误

    我正在使用余烬findQuery方法并想知道如何在没有结果时捕获 404 错误 this store findQuery customer hasProjects true getArchivedProjects archived then
  • 将 Ember 组件附加到不受 Ember 管理的 DOM 元素

    我想附加一个 Ember 组件ComponentB到由某些非 Ember UI 库生成的 DOM 元素didInsertElement of ComponentA 导致类似的结果 div class ember view component
  • 在 EmberJS 中获取父路由

    我正在制作一个可重用 有点多态 的评论小部件 我想要一个按钮 使我能够返回到父路由 例如 如果我位于 blog posts 1 comments 我希望该按钮将我带回 blog posts 1 我目前正在使用transitionToRout
  • 在 #each 内渲染视图

    每当我尝试在 each 块内渲染视图时 我都会收到一条 PrecompilationError 消息 Compiler said Error each doesn t match view Example each posts view A
  • Ember.js 处理 View 事件后转换到路由

    Setup 我有一个 Ember 应用程序 支持使用 Imgur API 上传图像 我已经有一个工作路线和模板来处理任何 Imgur ID 但我想在上传新图像后转换到此路线 使用返回的 Imgur ID 这是该应用程序的相关部分 http
  • 如何在 ember.js 路由中显示模型的非 id 字段的字符串值?

    我有一个自定义字段 允许您过滤模型列表 在某些 ArrayController 上 PersonApp SearchField Ember TextField extend keyUp function e var search this
  • Emberjs不会加载jquery/javascript,在页面中插入html时运行代码

    Help 我正在开发一个丰富的 emberjs yeoman 项目 该项目使用多个 hbs 模板 这些模板都可以从一个 application hbs 的侧边栏路由到 问题是当我加载页面时 有时使侧边栏折叠的 Jquery 不起作用 而同一
  • 收到 404 时模型的 EmberJS 路由

    同样的文本也在 EmberJS 讨论区中开放 我有以下路线 App IndexCrmPersonEditRoute Ember Route extend model function params var person this store
  • 如何使用新路由器重新渲染应用程序模板?

    The code 我正在使用的版本4fcdbf2560 https github com emberjs ember js tree 4fcdbf256039e8ca8d2647050e0c9a71234c922c与新路由器 在我的应用程序

随机推荐

  • 在 wpf 中找不到事件“SelectedIndexChanged”

    在 winform 中 当我创建组合框时 我可以找到事件 SelectedIndexChanged 活动工作after组合框的索引已更改 private void comboBox1 SelectedIndexChanged object
  • bash 通过匹配列合并文件

    我有两个文件 File1 12 abc 34 cde 42 dfg 11 df 9 e File2 23 abc 24 gjr 12 dfg 8 df 我想逐列合并文件 如果第 2 列相同 输出如下 File1 File2 12 23 ab
  • Angular2中的递归动态模板编译

    我的一些工作基于此处描述的相同问题 使用 Angular 2 0 编译动态组件的动态模板 如何使用 创建动态模板来使用 Angular 2 0 编译动态组件 可以找到上述问题中描述的工作plunkerhere 如果动态详细信息尝试创建另一个
  • 如何通过切换视图来改变小部件?

    我想要一个平滑的动画 可以在以前的比例和位置之间切换到当前的比例和位置 但看起来它并不是之前的精确比例或位置 为什么唯一的第一个小部件具有反向比例 gt ZoomIn 而不是 ZoomOut 我添加了一个 isSet 变量 因为第一帧显示的
  • 使用部分下载 (HTTP) 下载文件

    有没有办法使用部分下载功能通过 HTTP 下载巨大且仍在增长的文件 看来这段代码每次执行时都会从头开始下载文件 import urllib urllib urlretrieve http www example com huge growi
  • Laravel 服务提供商给出“目标 [接口] 不可实例化”错误

    我的错误信息 Illuminate Container BindingResolutionException Target Project Backend Service Validation ValidableInterface is n
  • 在c中返回一个数组

    我想知道是否有任何方法可以返回 char 数组 我尝试了类似 char fun 的方法 但出现错误 我不需要指针解决方案 谢谢 您可以通过将数组包装在结构中来返回数组 struct S char a 100 struct S f struc
  • jquery validate:如何使字段在更改时进行验证?

    在 jquery 的 validate 插件上 只有当用户将焦点放在另一个元素上时 错误消息才会消失 我想让它在写入正确信息后立即消失 如何 onchange 触发验证 selector validate onkeyup true
  • AdoQuery 使用参数时出错

    我需要更新字段值 增加旧值 像这样的东西 UPDATE MYTABLE SET FIELD1 FIELD1 VALUE WHERE 但是当运行下一个代码时我遇到了这个错误 参数对象不正确 定义的 不一致或不完整 已提供信息 这是我的代码 A
  • 在画布周围移动一个矩形

    我的应用程序中间有一个画布 周围有控件 我有一个接收点并将它们保存在列表中的套接字 我在画布上画了 4x4 的小矩形来表示列表中的点数 说有 4 个点 有 4 个矩形 我希望能够在点随代码变化时移动矩形 如果没有故事板或任何 动画 类 这可
  • 如何设置连接超时

    我正在查看下面的 C 代码 它设置了一个 http 连接并打开了一个请求 或者我相信是这样 并且想增加连接超时值 以便我可以发送更大的文件 我知道这不是处理大文件的最佳解决方案 但我觉得它是最快的解决方案 而且现在时间是一个大问题 编辑 我
  • 在 linq 的外连接中使用过滤器

    我有以下实体 public class Company public string CompanyName get set public int ID get set public class CompanyCurrency public
  • .Net Windows 应用程序中的缓存

    我正在一个基于 Windows 的应用程序中工作 该应用程序对每笔交易都使用主数据 该主数据通常不会更改 但在某些情况下可能会更改 我正在将此数据提取到缓存中或DataSet一次并将其用于将来的事务 但如果主表中的数据发生更改 则不想花时间
  • 作为 .py 运行时出现随机模块错误

    当您将其作为 py 运行时 它不会加载 random 的特定模块 但如果我在 python shell 中加载它 就没有问题 coding utf 8 usr bin env python import random print rando
  • innerHTML 不适用于 JS 中的类名

    我的下拉列表选择特定值
  • 将工作项从本地 TFS 迁移到 VSTS

    我正在将本地 TFS 迁移到 VSTS 云 TFS 到目前为止一切工作正常 但现在我想将所有现有工作项迁移到 VSTS 我在互联网上搜索了解决方案并找到了一些文章 他们建议使用一些 CMD Line 工具从 TFS 迁移工作项 但不幸的是
  • Ruby 使用 RegEx 在字符串中查找整个数学表达式 [重复]

    这个问题在这里已经有答案了 我正在尝试编写一个程序 该程序将接受字符串并使用 RegEx 来搜索某些数学表达式 例如 1 3 4 2 仅要查找的运算符是 so far string something something nothing 1
  • 如何获取 SSIS 脚本组件中的列值?

    在下面的代码中 我获取了列名称 但在中找不到 Value 属性输入栏 我还需要获取列的值 而不仅仅是名称 IDTSInput100 input ComponentMetaData InputCollection 0 IDTSVirtualI
  • VML 转 PNG/PDF (jsp)

    我已经使用 raphael js 在 Internet Explorer 8 中绘制了我的流程图 现在我想将我的绘图导出为图像文件 我找到了一些答案 但仍然困惑该怎么办 有人可以帮助我解决这个问题吗 示例代码会很棒 导出为 PNG 或 PD
  • Road to Ember 2.0 - 高级 Ember 应用程序结构反馈?

    我发现我正试图在一个特别波动的时期开始学习 Ember 最近的 Road to 2 0 博客文章帮助我明确了前进的方向 但我正在努力在高水平上验证我对 Ember 的方法 我想对人们的时间敏感 我的完整代码适合有兴趣提供更具体反馈的任何人