摘要:经过周末的连续通宵加班加点,版本终于问世。虽然组件通讯非常方便,但是各种数据传递组件实例互操作或者循环依赖,让代码非常难看且难以维护。所以是为了让组件通讯几乎绝迹。所以的插件不会有太多。完善的脚手架你可以安装,用来初始化项目脚手架。
原文链接--https://github.com/AlloyTeam/omi
写在前面Omi框架经过几十个版本的迭代,越来越简便易用和强大。
经过周末的连续通宵加班加点,Omi v1.0版本终于问世。虽然版本遵循小步快跑、频繁迭代,但是Omi团队成员都有着克制之心,处女座占了半壁江山,所以Omi的API除了增量的API,其他的历史API没有任何变化。
Github:https://github.com/AlloyTeam/omi
废话不多说,这就为大家介绍到目前1.0版本为止,关于Omi,你必须知道的点点滴滴。
强大的Store系统先说说Store系统是干什么的!
当我们组件之间,拥有共享的数据的时候,经常需要进行组件通讯。在Omi框架里,组件通讯非常方便:
通过在组件上声明 data-* 传递给子节点
通过在组件上声明 data 传递给子节点 (支持复杂数据类型的映射)
声明 group-data 把数组里的data传给一堆组件传递(支持复杂数据类型的映射)
完全面向对象,可以非常容易地拿到对象的实例,之后可以设置实例属性和调用实例的方法。比如(标记name、标记omi-id)
当然你也可以使用event emitter / pubsub库在组件之间通讯,比如这个只有 200b 的超小库mitt 。但是需要注意mitt兼容到IE9+,Omi兼容IE8。
虽然组件通讯非常方便,但是各种数据传递、组件实例互操作或者循环依赖,让代码非常难看且难以维护。所以:
Omi.Store是为了让 组件通讯几乎绝迹 。虽然:
Redux 的作者 Dan Abramov 说过:Flux 架构就像眼镜:您自会知道什么时候需要它。
但是,我不会告诉你
Omi Store 系统就像眼镜:您自会知道什么时候需要它。
因为,Omi Store使用足够简便,对架构入侵性极极极小(3个极代表比极小还要小),让数据、数据逻辑和UI展现彻底分离,所以我的观点是:
如果使用Omi,请使用Omi.Store架构。
比如连这个Todo例子都能使用Omi.Store架构。如果连复杂度都达不到Todo,那么Omi其实都没有必要使用,你可能只需要一个模板引擎便可。
关于Store详细的用法,后续再写文章阐述。
简易的插件体系omi-finger Omi的AlloyFinger插件,支持各种触摸事件和手势
omi-transform Omi的transformjs插件,快速方便地设置DOM的CSS3 Transform属性
omi-touch Omi的AlloyTouch插件,Omi项目的触摸运动解决方案(支持触摸滚动、旋转、翻页、选择等等)
omi-jquery-date-picker Omi的时间选择插件,支持各种时间或者时间区域选择
omi插件主要是赋予dom能力,并且能和instance关联。如果主要是结构行组件,就写成Omi组件,和插件也没有太大关系。所以omi的插件不会有太多。
完善的脚手架你可以安装omi-cli,用来初始化项目脚手架。
$ npm install omi-cli -g //安装cli $ omi init your_project_name //初始化项目 $ cd your_project_name //转到项目目录 $ npm run dev //开发 $ npm run dist //部署发布
项目脚手架基于 Gulp + Webpack + Babel + BrowserSync ,并且支持sass生成组件局部CSS
支持HTML、JS、CSS/Sass文件分离的目录方式,也支持HTML、JS、CSS 全都写在JS里的方式,两种方式可以同时出现在项目里,按需选择。
其他大量的示范例子(md2site、qq-nearby实战、各种example)
双版本支持,(omi.js和omi.lite.js)
其中omi.lite.js是不包含 mustache.js模板引擎的omi.js。Omi团队认为:
1.随着ES的发展,模板字符串和ES语法强大到可以不使用模板引擎(仅限于all in js的代码目录组织方式)
2.让开发者重写 Omi.template 去使用任意模板引擎
良好的兼容性,支持IE8(请自行引用es5-shim或es5-sham)
本来没有支持IE8的打算,后来发现babel加两个插件便可以支持IE8:
query: { presets: "es2015", plugins : [ "transform-es3-property-literals", "transform-es3-member-expression-literals" ] }
轻量迅速的DOM Diff 和 HTML Parser
更智能的事件绑定,如:
class Hello extends Omi.Component { handleClick(evt){ alert(evt.target.innerHTML) } render() { return `` } }Hello ,{{name}}!
你可以传递任意参数:
class Hello extends Omi.Component { handleClick(str, num){ } render() { return `强大的Omi团队` } }Hello ,{{name}}!
来自AlloyTeam、Mars Holding、腾讯、TalkingCoder、阿里、微软的优秀的工程师会协商规划好Omi发展路线,跟进优秀的思想和模式
来自AlloyTeam的工程师会跟进Omi使用者的任何问题
相关Omi的Github地址https://github.com/AlloyTeam/omi
如果想体验一下Omi框架,可以访问 Omi Playground
如果想使用Omi框架或者开发完善Omi框架,可以访问 Omi使用文档
如果你想获得更佳的阅读体验,可以访问 Docs Website
如果你懒得搭建项目脚手架,可以试试 omi-cli
如果你有Omi相关的问题可以 New issue
如果想更加方便的交流关于Omi的一切可以加入QQ的Omi交流群(256426170)
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/88190.html
摘要:用过的同学都知道,性能优化的关键就是,最被诟病的也是这个,很多开发者也吐槽这个钩子函数,也可以配合不可变数据类型,直接进行引用地址比较,来决定组件是否需要更新。 大家好,这次给大家讲下 Omi 框架 以及即将发布的 Omim 大家有没有数左边的图片里有多少个 Omi?Omi 团队很在意这里,特意数了下,有三个。Omi 团队希望 Omi 以后在各大会议里能够印刷得更加大一些。今天给大家带来的主...
摘要:不用担心组件的会污染组件外的会帮你处理好一切更自由的更新,每个组件都有方法,自由选择时机进行更新。通过安装点击这里在线试试你可以使用来生成组件标签用于嵌套。点击这里试试写程序加入吧 Omi Open and modern framework for building user interfaces. Omi的Github地址https://github.com/AlloyTeam/o...
阅读 2252·2023-04-25 23:15
阅读 1850·2021-11-22 09:34
阅读 1518·2021-11-15 11:39
阅读 875·2021-11-15 11:37
阅读 2121·2021-10-14 09:43
阅读 3445·2021-09-27 13:59
阅读 1486·2019-08-30 15:43
阅读 3428·2019-08-30 15:43