首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我们应该通过操作或数据与组件通信吗?

我们应该通过操作或数据与组件通信吗?
EN

Stack Overflow用户
提问于 2016-02-01 12:38:54
回答 2查看 85关注 0票数 1

我对什么是更好的方法感到困惑,我们应该更喜欢通过数据或操作在组件、组件/控制器之间进行通信吗?

下面是一个示例:我有一个文件上传器组件(包装jquery插件),组件设置的方式如下所示:

1)包含文件上载器组件的控制器定义了一个属性,通过该属性,两个实体将共享有关正在上载的文件的信息。

代码语言:javascript
运行
AI代码解释
复制
//some controller template
//where uploadedFiles is a property of the context controller
{{file-uploader uploadedFiles=uploadedFiles}}

2)在我们开始上传时,这个属性被传递给组件,并且组件使用错误/进度等填充它。此数据对象的结构如下所示:

代码语言:javascript
运行
AI代码解释
复制
{
   'file': file object we get from plugin
   'errors': [],
   'progress':10,
   .... 
}

该组件还执行一些基本的文件验证,如文件类型和大小。当这些错误发生时,我们用错误填充数据对象。现在我在争论--当这些自定义验证失败时,是否应该触发一个操作,或者在控制器中有一个观察者来检查数据对象,然后触发它需要的任何操作?

我更倾向于通过数据本身来交流事物,因为它保持了通信界面的清洁,但我也明白它需要花费大量的观察人员。

另一方面,传递操作避免了有观察者,但我不完全同意,因为我们可能会有另外10种情况,我们可能会觉得传递"action“是正确的选择,然后污染组件代码(当它可以通过数据通信时)。

我确实同意,在某些情况下,我们必须采取行动,但如果选择可以通过绑定数据进行沟通,那么行动是更好的选择吗?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-01 21:27:25

我觉得,你最好行动起来。我使用Ember大约两年,根据我的经验,观察者是不可预测的,真的很难调试。

如果你的观察者只是一行不成问题。但是数量代码几乎总是在增长,因此它将变得越来越复杂。

操作将使您更好地控制参数、更清晰的界面,并且可以更容易地跟踪和预测数据流。

在我们的余烬应用程序,我们有数百个观察员跨控制器和我们慢慢尝试清理尽可能多。

我不反对观察者,但只有当你没有其他方法去达到目标时,他们才能被使用。这是一个来自码头开发人员(Ember专家)的广义解释,它解释了为什么观察者是反模式的,应该避免。

票数 4
EN

Stack Overflow用户

发布于 2016-03-06 07:27:33

在我们讨论观察者之前,我们真正要问的问题是:

组件应该改变它们的论点吗?

如果我们将组件看作一个函数(我们传递给它数据,它做了一些事情),那么我们可以提升抽象级别:

职能应该改变他们的论点吗?

这是个老问题。它实际上是关于命令式编程(可变数据)和函数式编程(不变数据)。Ember和React都在向不变的样式发展,在这种风格中,子组件不会对传递的参数进行变异。这方面的一些例子:

因此,社区最佳实践是使用操作从子组件到其父上下文进行通信。并通过数据与子组件进行通信。

现在,假设你要在组件中直接变异数据--你想要做一些响应,在父控制器中--观察者出现的原因是,我们需要一些方法来根据数据的变化来产生副作用。有时,您可以选择使用计算属性。

观察者有什么不好的?与计算属性不同的是,它们是同步的和渴望的--这使得观察者比计算属性更棘手,尽管它们都对数据的变化作出反应。除了劳伦·谭的文章 ( kushdilip也链接到),Stefan Penner 解释得很好吗?

如果您担心大量操作会对组件代码造成污染,我会查看Ember 2中的余烬-可合成-帮手mut助手,很多操作代码实际上可以被推入模板中。

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

https://stackoverflow.com/questions/35139862

复制
相关文章
YouTube开源播放器中文使用指南
在这之前笔者使用原生的MediaPlayer、B站开源的IJKVideoView等播放器。直到发现ExoPlayer,这款由YouTube开发的播放器真的是非常强大。对于自定义播放器非常友好,里面将很多模块抽象成独立的组件可供使用者自行定制,当然官方也提供了一些默认的实现。如果你正在开发视频类功能,强烈推荐你尝试一下ExoPlayer。
吴延宝
2019/07/24
4K0
正确下载youtube视频的方式
youtube这个不存在的网站上有很多有用的资料,一般来说我们是可以下载所有视频到本地以供离线的情况下的研究学习,网上有很多工具提供了下载功能,但是在试用了很多标称很好用的软件后,老高发现,真的没有一个能和youtube-dl相提并论,所以老高还是记录一下如何使用正确使用youtube-dl!
老高的技术博客
2022/12/28
1.3K0
如何正确使用log
下面小编就为大家分享一篇使用log_format为Nginx服务器设置更详细的日志格式方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
习惯说一说
2019/07/04
2.4K0
[Java8]如何正确使用Optional
Optional是Java8提供的为了解决null安全问题的一个API。善用Optional可以使我们代码中很多繁琐、丑陋的设计变得十分优雅。这篇文章是建立在你对Optional的用法有一定了解的基础上的,如果你还不太了解Optional,可以先去看看相关教程,或者查阅Java文档。
KAAAsS
2022/01/14
7.1K0
Youtube开启或禁用HTML5播放器
用过MAC的TX都知道,如果没有FLASH想要播放YouTube的视频很麻烦。虽然用Chrome内置的FLASH很不错,但是动辄70+℃的CPU实在伤不起啊。H5播放器就没有这个弊端了,从此妈妈再也不用担心我的MAC了。
老高的技术博客
2022/12/27
1.4K0
iOS学习——iOS 宏(define)与常量(const)的正确使用
  在iOS开发中,经常用到宏定义,或用const修饰一些数据类型,经常有开发者不知怎么正确使用,导致项目中乱用宏与const修饰。你能区分下面的吗?知道什么时候用吗?
mukekeheart
2019/09/29
1.8K0
iOS学习——iOS 宏(define)与常量(const)的正确使用
如何正确的使用VSCode
由与我们的Coding工作比较辛苦,现在推荐大家一款VS code插件,专注于高(hun)效(shui)工(mo)作(yu),能让你更加高效的上(hua)班(shui)!
我被狗咬了
2019/09/23
4.7K0
如何正确的使用VSCode
如何“正确”使用技术词汇
大家知道,VESA 是视频电子标准协会的英文简称。它主导制定了一系列音视频领域的工业标准。最为大众熟知的标准之一就是 DisplayPort,还有目前在电视、显示器、手机屏得到广泛应用的 HDR 标准。
icsoc
2022/01/18
1.9K0
如何“正确”使用技术词汇
如何正确使用缓存技术
缓存技术是用来提升程序运行性能的常见手段,君不见, 阿里巴巴、新浪微博、美团网等互联网龙头企业都是用缓存技术来提升自己家网站的性能。然而,任何事物都有两面性, 缓存技术使用得当带来的好处自然不言而喻, 但是如果使用不当, 产生的副作用也够让人喝一壶的。 我们写服务器程序时,使用缓存的目的无非就是减少数据库访问次数降低数据库的压力和提升程序的响应时间, 然而根据具体的使用场景又可以派生出无数种情况, 比如说 程序频繁读取数据库, 但是查询获得的结果却总是相同的,这部分相同的结果是不是可以放入缓存 ? 获得查询
用户1608022
2018/04/11
2.2K0
如何正确的使用 order by
根据已有的知识,birth_city 字段出现在where条件中,我们在该字段上建立索引能加快访问速度。那么该语句的查询过程如下:
用户7447819
2021/07/23
2K0
iOS AVPlayer视频播放器
GOVVideoPlayer/GOVVideoController 是一个基于AVPlayer封装的视频播放器,支持播放/暂停、左右退拽快进、上下滑动调节音量、自动手动全屏、全屏时横屏Or竖屏、有缓冲进度指示条、卡顿指示器、切换视频源。 ---- 更新于2017/8/10,增加了GOVVideoController GOVVideoPlayer是在继承于UIView的基础上封装的视频View; GOVVideoController是在继承于UIViewController的基础上封装的视频视图控制器,
且行且珍惜_iOS
2018/05/22
4K0
如何正确合理使用 JavaScript async/await !
ES8 引入的 async/await 在 JavaScript 的异步编程中是一个极好的改进。它提供了使用同步样式代码异步访问 resoruces 的方式,而不会阻塞主线程。然而,它们也存在一些坑及问题。在本文中,将从不同的角度探讨 async/await,并演示如何正确有效地使用这对兄弟。
前端小智@大迁世界
2019/01/29
3.4K0
如何正确合理使用 JavaScript async/await !
如何正确使用padding和margin
前面两期我们学习了LinearLayout线性布局的方向、填充模型、权重和对齐,那么本期我们来学习LinearLayout线性布局的内边距和外边距。 关于padding和margin,很多同学傻傻分不清,相信通过今天的学习可以正确使用padding和margin。 一、内边距padding 默认情况下,组件相互之间是紧紧靠在一起的。但是有时候需要组件各边之间有一定的内边距,那就可以通过以下几个属性来设置,内边距的值是具体的尺寸,如5dp。 android:padding:为组件的四
分享达人秀
2018/02/02
4.1K0
如何正确使用padding和margin
干货!如何正确使用Git Flow
我们已经从SVN 切换到Git很多年了,现在几乎所有的项目都在使用Github管理, 本篇文章讲一下为什么使用Git, 以及如何在团队中正确使用。
哲洛不闹
2018/09/14
2.3K0
干货!如何正确使用Git Flow
如何正确使用图表颜色
前言 后台产品常常使用图表为用户直观呈现用户访问、机器性能等数据,辅助用户对数据进行分析,判断业务运行状况。在图表中必然少不了通过颜色来更加直观、有效地传递信息。但图表实际应用中,却存在颜色任意或者无意义地使用,造成噪音干扰。 那么,在图表中添加颜色时,如何正确地运用颜色来传递信息,帮助用户更好理解数据?本文将从以下几点进行陈述: 颜色传递特定信息 信息可视化原理 图表颜色应用 图表颜色使用建议 总结 颜色传递特定信息 在了解图表颜色该如何正确使用之前,先思考一个问题:在看图表中的颜色时,我们究竟能从中获取
腾讯云设计中心
2022/05/05
2.6K0
如何正确使用图表颜色
Python进阶——如何正确使用yield?
在 Python 开发中,yield 关键字的使用其实较为频繁,例如大集合的生成,简化代码结构、协程与并发都会用到它。
_Kaito
2021/03/23
2K0
安装LaTeX_如何正确使用
(很多杂志期刊接受LaTeX电子版时会提供自己的模板,只要使用他们的模板即可完美地展现在对应的刊物中)
全栈程序员站长
2022/09/21
2K0
安装LaTeX_如何正确使用
IOS下P2P播放器开发如何实现?
目前可以利用p2p技术,实现支持磁力链接、普通链接甚至是种子链接播放的软件,基本上还是集中在PC端。比如市场占有比较多的西瓜影音、吉吉影音、先锋影音,还有迅雷等。但是在手机端除了迅雷似乎没太有比较出名的P2P播放器。那么P2P技术在移动端的应用,从技术上来说是否可实现?包括安卓和iOS系统
点量小芹DolitQin520
2019/01/31
2.9K1
YouTube Direct:使用 YouTube 创建你自己的视频网站
YouTube 最近发布了一个新功能,YouTube Direct,它能让你i在自己的网站上直接嵌入 YouTube 视频上传功能,用户就能直接在第三方网站上上传视频,而 Direct 的用户则能够审核视频,是否接受用户上传的视频。这样 YouTube 除了是一个视频分享网站之外,现在又真正成为了一个视频服务存储服务平台,让任何媒体,组织或者个人都能利用 YouTube 构建属于自己的视频网站。
Denis
2023/04/14
1.9K0
YouTube Direct:使用 YouTube 创建你自己的视频网站
点击加载更多

相似问题

youtube-ios-播放器-助手和chromecast

210

Youtube iOS播放器助手库没有工作

11

我能为youtube-ios播放器助手静音吗?

36

IOS YouTube助手库

12

YTPlayerView youtube-ios-播放器-助手暂停不起作用

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档