Webix 是一个JavaScript UI 库,提供了多达88个UI小部件和功能丰富的 CSS/HTML5 JavaScript 控件。使用 Webix 可以有效地加快 Web 应用的开发。文本将演示了如何通过 Webix 框架,来创建一个 Email 客户端原型。

安装 Webix

可以下载 Webix 的 JS、CSS 文件,但最快的方式是使用 Webix 的 CDN, 如下:

<!DOCTYPE HTML>
<html><head><link rel="stylesheet" href="http://cdn.webix.com/edge/webix.css" type="text/css"> <script src="http://cdn.webix.com/edge/webix.js" type="text/javascript"></script>  </head>...
</html>

快速开始

我们为我们的第一个应用创建第一个页面 index.html。在 <body> 中定义 js 脚本,来放置 UI 配置:

<!DOCTYPE HTML>
<html><head><link rel="stylesheet" href="http://cdn.webix.com/edge/webix.css" type="text/css"> <script src="http://cdn.webix.com/edge/webix.js" type="text/javascript"></script>  </head><body><script type="text/javascript" charset="utf-8">/*  UI 配置 */</script></body>
</html>

接着,我们编写 UI 配置:

webix.ui({rows: [{view: "template",type: "header", template: "我的应用!"},{view: "datatable",autoConfig: true,data: [{ title: "Way Lau", year: 1987, votes: 533848, rating: 8.9, rank: 5 },{ title: "老卫", year: 1987, votes: 53248, rating: 5.9, rank: 6 }]}]
});

为了能更加友好显示中文,我们在<head>标签里面加上<meta charset="UTF-8">

这样,我们完整的第一个应用的代码如下:

<!DOCTYPE HTML>
<html><head><meta charset="UTF-8"><link rel="stylesheet" href="http://cdn.webix.com/edge/webix.css" type="text/css"><script src="http://cdn.webix.com/edge/webix.js" type="text/javascript"></script>
</head><body><script type="text/javascript" charset="utf-8">/*  UI 配置 */webix.ui({rows: [{view: "template",type: "header", template: "我的应用!"},{view: "datatable",autoConfig: true,data: [{ title: "Way Lau", year: 1987, votes: 533848, rating: 8.9, rank: 5 },{ title: "老卫", year: 1987, votes: 53248, rating: 5.9, rank: 6 }]}]});</script>
</body></html>

用浏览器直接打开我们的index.html 页面,可以看到如下效果:

探索项目

那么,我们来简单介绍下 Webix 的原理。

Webix 的应用程序都是放置在 script 脚本中:

webix.ui({// 组件
});

需要注意的是,如果想让 Webix 脚本在 HTML 文档加载完了再执行,可以使用 webix.ready(function(){ ....}) 来包裹我们的 Webix,用法如下:

webix.ready(function(){webix.ui({....});
});

下面代码是用 Webix 中的 view 来定义一个视图组件,多个 view 可以实现复杂的应用布局结构:


rows: [{view: "template",type: "header", template: "我的应用!"},{view: "datatable",autoConfig: true,data: [{ title: "Way Lau", year: 1987, votes: 533848, rating: 8.9, rank: 5 },{ title: "老卫", year: 1987, votes: 53248, rating: 5.9, rank: 6 }]}
]

在上述例子中,我们用到了两种类型的 view,其中,

  • rows 代码垂直布局的多个列,这个,我们每个行(row)就是一个view
  • ui.template 是一个用于包裹 HTML 内容的容器。这里我们用来类型为headertemplate来说明这个是应用头。更多 template 的类型,可以自行参阅https://docs.webix.com/samples/80_docs/template_types.html;
  • ui.datatable 是一个功能丰富的数据表格组件;
    • autoConfig 设置为 true,表明表格会根据数据来自适应;
    • data 就是表格中放置的数据

进阶

在快速了解 Webix 的相关概念之后,我们就要来创建一个稍微复杂一点的应用,就是本文的主要内容“Email 客户端”。

布局

从大布局开始,再逐步求精,是构建前端应用的基本思路。我们创建了如下布局结构:

webix.ui({type: "space",rows: [/* 1st row. Toolbar */{template: "Toolbar",height: 45,},/* 2nd row. The rest of application */{type: "wide", cols: [/* 1st column of the second row./* Folder tree and Calendar */{type: "clean",rows: [{template: "Tree",width: 280},{template: "Calendar"}]},/* 2nd column of the second row./* Email list, Buttons, and Message reader */{type: "wide",                    rows: [{ template: "Email List" },{height: 45, cols: [{ template: "Button1" },{ template: "Button2" },{},{ template: "Button 3" }]},{ template: "Message" }]}]}]
});

其中:

  • cols 就是列,每行(row)可能包含了多个列(col);
  • height 和 width 属性来定义视图所需的大小了
  • type,它定义了布局边框。如果使用clean将获得无边框的单元格,使用wide将获得有边框的、有更大空间的单元格。

实现 Toolbar

Toolbar(工具栏)可以包含各种元素,如按钮或下拉菜单等。

记住,要使用Webix创建组件,必须使用view:“component_name”代码行,元素属性允许选择工具栏的内容。

...
{view: "toolbar",height: 45,elements:[{view: "label", label: "Webix Email 客户端"}]
},
...
  • elements 用来放置子的view组件。
  • label 就是显示普通的文本标签

这里,我们使用了 ui.chart,来创建图表。

实现 Tree

创建菜单目录树:

...
{view:"tree",id: "my_tree",select: true,width:280,data:[{ id:"1", value:"收件箱"},{ id:"2", value:"已发送"},{ id:"3", value:"草稿箱"},{ id:"4", value:"垃圾箱"},{ id:"5", value:"通讯录", open:true, data:[{ id:"5-1", value:"好友"},{ id:"5-2", value:"家人"}]}]
},
...

其中:

  • tree 是一个功能丰富的树形组件;
  • open 设置为 true,来让我们的树在初始化时就处于打开状态。

最终效果如下:

实现 Calendar

创建日历组件:

...
{view:"calendar",timepicker:true
},
...

其中:

  • calendar 是一个功能丰富的日历组件;
  • timepicker 设置为 true,在日历上显示时间选择器。

最终效果如下:

实现 Email 列表

还记得我们的在“快速开始”部分的那个表格吗?这里同样需要用表格来实现 Email 列表:

创建Email 列表:

...{id: "my_datatable",view: "datatable",scrollX: false,columns: [{id: "checked", header: { content: "masterCheckbox" },template: "{common.checkbox()}", width: 40},{ id: "name", width: 250, header: "发件人" },{ id: "subject", header: "主题", fillspace: true },{ id: "date", header: "时间", width: 150 }],data: [{id: 1, folder: 1, name: "Way Lau",email: "waylau521@gmail.com", subject: "Invitation",date: "25/07/2017 12:30:20"},{                                                id: 2, folder: 1, name: "老卫",email: "waylau521@163.com", subject: "Report",date: "25/07/2017 16:10:07"},{id: 11, folder: 2, name: "Way Lau",email: "waylau521@gmail.com", subject: "Re: Forecast",date: "25/07/2017 14:10:45"},{id: 12, folder: 2, name: "老卫",email: "waylau521@163.com", subject: "Party invitation",date: "25/07/2017 17:05:10"}]},
...

其中:

  • columns 用来定义表头;
  • header:{ content:"masterCheckbox" } 定义了可以全选列表的 checkbox;
  • template:"{common.checkbox()}" 设置每个列表项都会带有一个 checkbox;
  • scrollX 设置为 false,意味着禁用了水平的滚动条。
  • fillspace 设置为 true,意味可以自动填充宽度。

最终效果如下:

事件处理

事件,让组件具备交互功能:

...
// 绑定事件
$$("my_datatable").bind($$("my_tree"),function(obj,filter){return obj.folder == filter.id;
});// 选中第一个节点
$$("my_tree").select(1);
...

其中:

  • "my_datatable" 为 datatable 组件的 id。绑定了"my_tree"的点击事件;
  • $$("my_tree").select(1) 意味着树节点会选中第一个节点。

最终效果如下:

按钮实现

按钮实现如下:

...
{height: 45, cols: [{view:"button",label:"回复",width: 95},{view:"button",label:"创建",width: 95},{},{view:"button",label:"删除",width: 95}]
},
...

其中:

  • "my_datatable" 为 datatable 组件的 id。绑定了"my_tree"的点击事件;
  • $$("my_tree").select(1) 意味着树节点会选中第一个节点。

最终效果如下:

展示 Email 正文

展示 Email 正文实现如下:

...
{id:"details",template:"No message selected"
},
...

如果想显示文本,可以编写如下脚本:

var message = "大道至简  https://waylau.com";$$("details").define("template",message);
$$("details").render();

最终效果如下:

编辑窗口

发送邮件,我们需要有一个编辑窗口:

webix.ui({view:"window",move: true,id:"my_win",width:400,head:"创建新邮件",position: "center",body: {view:"form",borderless:true,elements: [{ view:"text", label:'收件人:', name:"address" },{ view:"text", label:'主题:', name:"subject" },{ view:"textarea", height:200, label:"内容:", name:"message"},{ cols: [{ view:"button", value: "发送", },{ view:"button", value: "关闭", click:("$$('my_win').hide();") }]},],}
});

然后在“创建”的按钮上,添加弹出窗口的事件:

...
{view:"button",label:"创建",width: 95,click:function(){$$("my_win").getBody().clear();$$("my_win").show();}
},
...

最终效果如下:

源码

  • https://github.com/waylau/webix-tutorial

参考文献

  • https://opensource.com/article/17/5/10-step-guide-webix-framework
  • https://docs.webix.com/tutorials__quick_start.html
  • 本文同步至https://waylau.com/email-client-with-webix

转载于:https://my.oschina.net/waylau/blog/1027097

使用 Webix 创建 Email 客户端相关推荐

  1. webix框架中文版_使用Webix框架创建电子邮件客户端的十步指南

    webix框架中文版 在本文中,我将讨论在免费的Webix框架的帮助下为电子邮件客户端创建用户界面的过程. 这是一个JavaScript和HTML5框架,用于开发具有响应用户界面的跨平台,数据丰富的W ...

  2. 【Android WebSocket】Android 端 WebSocket 基本用法 ( 添加依赖和权限 | 创建 WebSocketClient 客户端类 | 建立连接并发送消息 )

    文章目录 一.添加依赖和权限 二.创建 WebSocketClient 客户端类 三.建立连接并发送消息 使用 https://github.com/TooTallNate/Java-WebSocke ...

  3. 如何创建Kafka客户端:Avro Producer和Consumer Client

    1.目标 - Kafka客户端 在本文的Kafka客户端中,我们将学习如何使用Kafka API 创建Apache Kafka客户端.有几种方法可以创建Kafka客户端,例如最多一次,至少一次,以及一 ...

  4. java chat_使用 Java 创建聊天客户端-1

    1.聊天客户端文本框的搭建. 项目截图:java project 代码: (1).ChatManager.java package com.nantian.javachatclient.main; i ...

  5. 使用.NET System.IO.Pipelines和Kestrel套接字库创建Redis客户端

    目录 背景 介绍 Redis协议 软件设计 下载最新的存储库存档 本文是关于为Redis服务器创建异步客户端的系列文章中的第一篇,该客户端低分配,因此GC压力小,数据复制最少.这是使用技术完成的,这些 ...

  6. Html中a标签用法总结:创建email,电话,描点链接等。以及防止链接被搜索引擎收录

    a标签可以用来创建一个到其他网页.文件.同一页面内的位置.电子邮件地址或任何其他URL的超链接. 是我们常用的一个标签之一,今天就讲讲如何使用a来创建email,电话,描点链接等.以及防止链接被搜索引 ...

  7. g33k 专用:使用 Mutt Email 客户端管理你的 Gmail

    你是终端爱好者+键盘控吗?如果可以在上图这种界面中使用 Gmail ,你会不会兴奋异常呢? 上图即是 mutt 这款基于文本界面的 Email 客户端程序,下面我们来简单介绍一下如何安装并设置用 mu ...

  8. 创建TLS 客户端凭据时发生严重错误。内部错误状态为 10013。处理记录

    某天用Adobe Media Encoder 2022给视频压缩转码时出现蓝屏,重新开机后查找系统日志,最后的报错是[创建 TLS 客户端 凭据时发生严重错误.内部错误状态为 10013.] 让我大吃 ...

  9. TCP:创建TCP客户端

    创建TCP客户端不需像创建TCP服务器那样麻烦,创建TCP客户端就像我们打电话,只需要两步即可: 1.找电话亭. 2.输入号码. 即: #导入socket import socket #创建TCP/I ...

最新文章

  1. python基础6(来自廖雪峰的官方网站)
  2. 20190216 vagrant up 失败问题
  3. vue 页面使用百度地图
  4. application/json 四种常见的 POST 提交数据方式
  5. (JAVA)String类之比较方法
  6. SQL2012 附加数据库提示5120错误解决方法
  7. 微信小游戏的前端攻城狮玩法
  8. CSS3 浮动与定位
  9. 递增的整数序列链表的插入
  10. 设计模式--迭代器模式(C++实现)
  11. 如何为Mac视频添加模糊效果?
  12. 解决:PHP Deprecated: Comments starting with '#' are deprecated in ……
  13. 7大前端项目速览!非一线城市也吃香!
  14. Mysql的锁类型有哪些?
  15. 小程序之校园交流平台
  16. SpringBoot中出现‘@‘ that cannot start any token. (Do not use @ for indentation)....
  17. 云计算 第四章 微软云计算 Windows Azure
  18. 【复变函数与积分变换】05. 留数
  19. SSL/TLS(4): TLS连接握手过程详细分析
  20. 计算机一级考试试题在线操作,计算机一级考试试题操作题和答案

热门文章

  1. javascript 模式学习篇---基础
  2. hibernate增删改查的标准范例
  3. Android 的WIFI
  4. c 全局变量多线程调用_c语言局部变量 静态局部变量 全局变量与静态全局变量...
  5. textarea选中行删除_如何一键删除表格空行,这个方法才最高级!
  6. 如何得到iterator的当前元素_链表进化!双向链表+迭代器(Iterator)!
  7. UVA10970大块巧克力
  8. 【数字信号处理】傅里叶变换性质 ( 序列傅里叶变换共轭对称性质示例 )
  9. 【Groovy】MOP 元对象协议与元编程 ( 方法合成 | 动态注入方法 )
  10. 【Groovy】Groovy 扩展方法 ( Groovy 扩展方法引入 | 分析 Groovy 中 Thread 类的 start 扩展方法 )