ember.js - 架构问题 - 使用子路由与组件
问题描述
我正在尝试构建一个 UI,左侧栏有过滤器,右侧有实际过滤数据。对于将数据加载到 UI 的动态部分(右侧),哪种方法在代码质量和应用程序性能方面被认为更好?
- 使用子路由(用于 UI 的动态部分)
- 使用单独的组件来加载自己的数据(用于 UI 的动态部分)
解决方案
对此没有直接的正确答案;你可以同时使用这两种方式,但这里有一些事情需要考虑,最后我通常更喜欢使用子路由,原因如下:
- 等待 UI 加载:如果您使用单独的组件来加载自己的数据;那么你需要处理组件的加载状态。我的意思是; 如果您只是使用子路线;然后模型钩子(
model
,beforeModel
等)将在显示数据之前等待承诺得到解决。如果您只是提供一个加载模板(详情请参阅指南),它将默认显示。如果您使用组件,您可能需要处理显示覆盖/微调器以提供更好的用户体验。 - 错误处理:类似加载状态管理;Ember 已经内置了对路由挂钩方法期间错误处理的支持。如果您更喜欢组件来进行远程调用,您将需要自己处理。(详见指南)
- 应用状态: Ember 是 SPA 框架;将应用程序状态与 URL 同步是常见的做法。如果您使用子路由;您可以简单地使用查询参数(详细信息请参阅指南),您将能够与其他人共享 URL,并且应用程序将以相同的状态加载。对组件做同样的事情有点棘手。您仍然需要在路由中使用查询参数并将参数传递给组件来执行此操作。
- 使用组件挂钩方法:如果您打算使用组件,那么您很可能需要使用组件挂钩方法以默认
filter
值打开应用程序。这意味着您将需要在一个或多个组件挂钩方法中init
对服务器进行一些远程调用。我个人不喜欢在这些方法中进行远程调用;因为我觉得这应该更好地在路由中完成,并且应该将数据传递给组件;但这是我个人对编码的品味,你应该以不同的方式处理这个案例,这很好。willRender
didReceiveAttrs
推荐阅读
- sql-server - 删除“Sortkey”中的一些“sortkey”后如何对“SortKey”进行sql排序和更新
- c# - Xamarin appshell - 强制立即创建第二个选项卡(视图)
- c# - 实体框架迁移删除和更新不起作用
- python - 你如何在 Django 中使用下载的模板
- wordpress - 如何确保子主题 functions.php 正在运行
- rest - 如果用户想要对其个人资料和个人资料图片执行操作,客户端是否应该为 API 发送两个不同的 HTTP 请求
- excel - 在两个 Excel 实例之间复制值得到运行时错误 9
- java - 如何在 RecyclerView 中获取单击项目的位置
- terraform-provider-azure - 如何使用 Terraform 启用 Application Insights?
- python - Python Selenium:日期选择器选择日期