Road to the future.
> Ques是一套由`腾讯课堂团队`开发的组件化系统,解决如何定义、嵌套、扩展、使用组件。 > > Ques,可以使得开发者通过`Markup`来引入组件,而无需关注组件内部的依赖以及关系,真正做到一处引用,立刻使用。使用统一的接口来管理组件,让代码可预测,逻辑可分辨。 ### 快速使用 * 安装依赖 > npm install * 运行学习环境 > gulp learn * 浏览DEMO 打开浏览器,打开页面:http://localhost:3000/learn ### 基本命令 * 启动学习环境 > gulp lean 打开浏览器,打开页面:http://localhost:3000/learn * 启动开发环境 > gulp app 打开浏览器,打开页面:http://localhost/index.html * 构建 > gulp 生成到dist文件夹,具体请参见`gulpfile.js`。 * 升级 > gulp update 更新到`miniflycn/Ques`主干的最新版本。 ### 组件化的含义 未来组件不再是`Javascript插件`,或者是`模版`、`样式`、`逻辑`这种分离的个体。而应当更像`Custom Element`,回想一下我们是如何使用一个`input`标签的? 在页面写下`<input>`,并设置她的初始化`value`,则她便可在页面按其默认样式展示,然后在Javascript中`绑定她的事件`、`设置她的值`、`使用其方法`。 简单的说,`input`标签有她自有的`结构`、`样式`、`逻辑`。于此类似,我们期望的组件具有下面的特点: 1. 可以在页面通过写一个标签引入,例如一个dialog组件,我们可以通过`<dialog></dialog>`简单引入 2. 我们可以通过简单的方式得到他的Javascript实例 3. Javascript实例应当有自己的`数据模型`、`方法`、`事件`,所以我们可以把其看成是一个`状态机`,在数据变化的时候,View会产生变化 4. 组件可以嵌套(即组合)、扩展(即继承),组件应当可以自行管理自己嵌套的子组件 ### 这样做有什么好处? 那么这样做的好处是什么,我先说下不这样做的坏处是什么吧: 1. 传统的组件在使用时需要知道需要使用什么`模版`、`样式`、`脚本`,并且这些东西被分散在`HTML`、`CSS`、`Javascript`不同的地方引用,组件的插拔是非常麻烦的 2. 传统的组件由于没有统一的规范支持,所以`引入`、`调用`方式千差万别,开发人员必须在详细了解清楚之后才可使用 3. 无法简单地或者根本没办法实现组件的嵌套或扩展,或者实际上只是Javascript的组合和继承,CSS和模版没有半毛钱关系。 ### 与当前一些好的组件化机制对比 1. 现代的一些组件(例如FIS2)机制,虽然已经Component化,但是无法嵌套、扩展,无法自由控制粒度,复用性较差(暂时了解的情况不知道理解正确不正确) 2. 还有一些组件机制(例如React),其以Javascript作为容器,在体验上较为反前端,而我们和基本的前端体验是对齐的 3. 最后一些组件机制(例如Polymer),她比较未来,较长时间内都无法使用