首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >体系结构问题-使用子路由与组件

体系结构问题-使用子路由与组件
EN

Stack Overflow用户
提问于 2018-12-01 08:20:05
回答 2查看 81关注 0票数 1

我正在尝试构建一个UI,左边的条形有过滤器,右边有实际的过滤数据。对于将数据加载到UI的动态部分(右侧),哪种方法在代码质量和应用程序性能方面被认为更好?

  • 使用子路由(用于UI的动态部分)
  • 使用单独的组件加载自己的数据(用于UI的动态部分)
EN

回答 2

Stack Overflow用户

发布于 2018-12-03 00:10:36

对此没有一个直接的正确答案;你可以使用这两种方式,但这里有几件事要考虑,最后,我通常更喜欢使用子路线,因为以下原因:

  1. 等待UI加载:,以防您使用单独的组件加载自己的数据;然后,您需要处理组件的加载状态。我的意思是,如果您只使用子路由,那么模型挂钩(modelbeforeModel等)将在显示数据之前等待承诺得到解决。如果您只是提供一个加载模板(参见详细信息指南),默认情况下将显示该模板。如果您使用组件,您可能需要处理显示覆盖/旋转器以提供更好的UX。
  2. 错误处理:类似于加载状态管理;Ember已经构建了在路由钩子方法中支持错误处理的功能。如果您希望组件进行远程调用,则需要自己处理这些问题。(参见详细信息指南)
  3. 应用程序状态: Ember是框架;将应用程序状态与同步是一种常见的做法。如果您使用子路由;您可以简单地使用查询参数(请参阅详细信息指南),您将能够与其他人共享该URL,并且应用程序将以相同的状态加载。对组件做同样的操作要复杂一些;您仍然需要在路由中使用查询参数,并将参数传递给组件。
  4. 使用组件钩子方法:,如果您打算使用组件,那么您很可能需要使用组件钩子方法来打开具有默认filter值的应用程序。这意味着您需要在initwillRenderdidReceiveAttrs组件钩子方法的一个或多个方法中对服务器进行一些远程调用。我个人不喜欢在这些方法中进行远程调用;因为我觉得这应该在路由内进行,数据应该传递给组件;但这是我个人的编码品味,您应该以不同的方式处理这个问题,这是非常好的。
票数 4
EN

Stack Overflow用户

发布于 2018-12-03 03:19:21

数据向下,动作向上保持组件的灵活性。

在您的具体示例中,我将提出第三个选项:发出操作的独立组件,它们的数据由路由的控制器加载,并且永远不会直接按照DDAU操作它们传递的参数。

我将有一个组件search-filter searchParams=searchParams onFilterChange=(action 'filterChanged')用于搜索过滤器,另一个组件是search-results data=searchResults来显示数据。

让我们先看看搜索过滤器。使用操作提供了最大的灵活性,因为搜索过滤器只是在更改时发出某种类型的搜索对象。您的控制器操作如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
actions: {
  filterChanged(searchParams){
     this.set('searchParams', searchParams);
     //make the search and then update `searchResults`
  }
}

这意味着您的search-filter组件将所有搜索过滤器字段聚合到一个单独的搜索对象中,该对象用作onFilterChange的唯一参数。

您现在可能会想,“那么,为什么不直接从组件内部进行搜索呢?”您可以这样做,但是这样做意味着在加载时,首先将params传递给组件,然后在didInsertElement上进行默认搜索,该搜索会发出一个操作结果,该操作将更新searchResults值。我发现这个控制流并不是最明显的。此外,您可能需要发出一个onSearchError回调,如果搜索操作/搜索筛选器参数可以一起应用,则可能需要发出其他操作/助手选项,这些操作将有条件地依赖于应用程序中的页面。

每当搜索筛选器字段更改时,接收搜索对象并发出动作的组件很容易推理。由于searchParams是单向绑定的,在其模板中使用此组件的任何route都可以控制字段字段是否更新(在无效情况下可选地阻止searchParams的更新),或者搜索是否触发基于routes之间可能不同的验证规则。此外,在单元测试期间,不存在对依赖项的模拟。

在使用子线路之前要三思

对于您问题的subroutes部分,我发现深度嵌套的路由几乎总是反模式。我的意思是,在app->first-child->second child之外,第一个孩子是一种类似于菜单的结构,它通过简单的{{link-to}}帮助程序在second child级别控制不同显示之间的变化。如果我必须在父母和孩子之间共享状态,我就创建一个first-child-routes-shared-state服务,而不是执行modelForcontrollerFor歌曲和舞蹈。

您还必须考虑在辩论如何使用子route{{if}} {{else}}节时,back按钮行为是否应该返回到前一步,还是在进入整个部分之前返回到路由。在一个从创建->审查->完成的线上传输向导中,我真的应该在已经付款之后按下从完成到检查的后退按钮吗?

searchFilter + displayData的情况下,他们对我来说总是在同一条路上。如果在URL刷新时搜索值需要持久化,则选择查询参数。

最后,请注意,仅仅因为/users/:id/profile意味着嵌套,您也可以使用this.route('user-profile', { 'path' : 'users/:id/profile' })并完全避免嵌套。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53572759

复制
相关文章
并发编程时遇到的问题
观察逻辑发现这个数组中的每个元素执行起来,其实没有必然的先后关系,完全可以并发执行,于是我改了一版代码:
有财君
2023/03/22
5130
并发编程时遇到的问题
处理solr时遇到的问题
前面的博客说了,我在解决solr索引的问题,但是后面我遇到的问题一次比一次严重,上次还能访问solr和系统,上次博客中看到我的solr上面有报错,那是我new_core出现的问题,我作死的在linux中删除了new_core文件
余生大大
2022/11/02
6260
处理solr时遇到的问题
继承HibernateDaoSupport时遇到的问题
都知道spring提供的有零配置功能,而且看见别人的一个项目使用spring+mybatis,只在applicationContext.xml里定义了sqlSessionFactory,然后什么都不用配置了,baseDao继承自SqlSessionDaoSupport,只需要在每个dao上加@Repository注解,spring会自动向对象中注入sqlSessionFactory对象。
用户1212940
2019/05/28
9910
EasyGBS查找大华设备的录像列表时失败
EasyGBS查找大华设备的录像列表时页面提示query recordinfo return 400 Bad Request
EasyNVR
2020/04/23
7860
EasyGBS查找大华设备的录像列表时失败
Python在import时遇到的惨案
    最近使用基于python语言的django框架开发web相关的应用,但是在访问页面的时候会不定时的报错,import导入报错
用户9127725
2022/08/08
4370
MeterSphere教程:列表数据断言遇到的问题
另外的话,如果测试环境经常会删数据之类的,那么接口里面的测试数据可能就会受到影响,要尽可能的保证用例的稳定正常的执行。
小博测试成长之路
2023/02/24
1K0
MeterSphere教程:列表数据断言遇到的问题
我在移动web开发中遇到的各种问题
目前(2015年8月3日15:02:24)在大部分安卓手机都发现这个问题,触发bug的条件知道了,但是原因未知。触发bug的条件是需要横向滚动的层不能位于纵向滚动不是body的层下面(后面有具体解释)。
黒之染
2018/10/19
1.8K0
LAMP安装mysql 时遇到的问题汇总
1: 缺少 libaio 包, libaio是Linux下的一个异步非阻塞方式读写文件的接口。 1 2 3 [[email protected] MySQL]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql Installing MySQL system tables... ./bin/mysqld: error while loading shared libraries: libaio.so.1:
老七Linux
2018/05/09
1.5K0
AIR切换SDK版本时遇到的问题
切换SDK,有时候会遇到这个问题。上面我使用的是sdk4.5,只需要修改应用程序的app.xml配置就可以正常运行air程序了。
meteoric
2018/11/16
7340
Impala删除kudu表时遇到的问题
在IMPALA上面创建了KUDU表之后DROP TABLE了该表,想要重新执行建表语句,但是发现报错了,提示表已存在无法新建。
chimchim
2023/10/17
4890
Impala删除kudu表时遇到的问题
记录使用mongoDB时遇到的有趣问题
最近在开发金融类的k线、盘口业务,而这些业务的海量数据如何存储,公司的技术选型,选择了MongoDB。
Blue_007
2023/10/21
2230
记录使用mongoDB时遇到的有趣问题
Struts框架搭建时所遇到的问题
        解决方案:将以下7个jar拷贝到项目工程中_(workspace_项目名_webRoot_WEB-INF_lib下),其他用到的包再慢慢添加:                             struts2-core-2.1.6.jar、                             xwork-2.1.2.jar、                             freemarker-2.3.13.jar、                            ognl-2.6.11.jar、                            commons-logging-1.0.4.jar、                            commons-fileupload-1.2.1.jar、                            commons-io-1.3.2.jar
shirayner
2018/08/10
4380
python 中如何查找列表长度
In this article, we will be unveiling techniques to find the length of a Python list. Finding the length actually means fetching the count of data elements in an iterable.
用户8418197
2022/01/09
2.7K0
在MATLAB中优化大型数据集时通常会遇到的问题以及解决方案
以上是在MATLAB中优化大型数据集时可能遇到的问题,对于每个问题,需要根据具体情况选择合适的解决方案。
一凡sir
2023/08/09
6490
在使用Qt5.8完成程序动态语言切换时遇到的问题
因为之前了解过一些Qt国际化的东西,所以在写程序的时候需要显示给用户的字符都使用了 tr(" ")的形式,然后使用 Qt Linguist得到相应的 qm(Qt message)文件,再通过网上介绍的方式,在 main函数中使用 installTranslator,即可让程序在启动时自动判断语言环境,加载相应语言。 至此,静态语言切换已经完成,下面要做的是动态切换(即不需要重启软件)。 1.首先,令语言能够切换的 GUI组件用的是 QComboBox,信号是 currentIndexChanged,在于这个
用户1653704
2018/06/07
1.6K0
我在面试机器学习、大数据岗位时遇到的各种问题
自己的专业方向是机器学习、数据挖掘,就业意向是互联网行业与本专业相关的工作岗位。各个企业对这类岗位的命名可能有所不同,比如数据挖掘/自然语言处理/机器学习算法工程师,或简称算法工程师,还有的称为搜索/推荐算法工程师,甚至有的并入后台工程师的范畴,视岗位具体要求而定。 机器学习、大数据相关岗位的职责 自己参与面试的提供算法岗位的公司有 BAT、小米、360、飞维美地、宜信、猿题库 等,根据业务的不同,岗位职责大概分为: 平台搭建类 数据计算平台搭建,基础算法实现,当然,要求支持大样本量、高维度数据,所以可能
小莹莹
2018/04/20
1.3K0
我在面试机器学习、大数据岗位时遇到的各种问题
在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "StdAfx.h"”?
在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "StdAfx.h"”? 右键选择该文件.cpp格式的->属性->预编译头,→ 不使用预编译头 错误描述:fatal err
战神伽罗
2019/07/24
8.4K0
使用jQuery中hover事件时遇到的一个小问题
在jQuery中有一个hover()方法,它可以实现模拟css中:hover这个伪类的效果。
colezhou
2019/11/24
1.8K0
如何解决爬虫程序中登录时遇到的动态Token问题
在进行网络爬虫开发时,我们经常会遇到登录网站的需求。然而,有些网站为了增加安全性,会采用动态Token的方式进行用户认证。这就给爬虫程序的开发带来了一定的的挑战。所以今天我们就重点来介绍如何解决爬虫程序中登录时遇到的动态问题。
小白学大数据
2023/08/16
1.3K0
点击加载更多

相似问题

在Prolog中查找列表长度时遇到的问题

21

在测试python中是否存在列表中的内容时遇到问题

10

在Puppet中查找模板时遇到问题

22

在python selenium中查找元素时遇到的问题

15

查找每个会话的列表消息查询时遇到问题

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文