那本厚厚的JavaScript高级程序设计还没看完,先开动jQuery。早就听说jQuery的强大,这个jQuery MiniUI是基于它的,强于处理表格数据,提供了方便的API,可以研究一波。
概述
MiniUI
在MiniUI官网下载对应版本的MiniUI。不过其实开发前端只用到里面的几个js文件和miniui文件夹而已。对于我下载的这个mini_java版本而言,就是WebContent\scripts
中的miniui文件夹、boot.js、jquery-1.6.2.min.js、tongji.js。这里的tongji其实是个空文件,暂时不知用途。
其他开发环境配置
除了前端的MiniUI,事实上这边还需要用Java的maven来构建ssh框架。为此安装了jdk-6u20-windows-i86, mysql-5.0.22-win32, Eclipse Java EE Indigo。暂时还没有学这些。
表格(CRUD)
CRUD增查改删
C-create, R-retrieve, U-update, D-delete,对应到数据库中最常用的四个操作“增查改删”。在MiniUI中,主要是以表格的形式呈现数据的,MiniUI提供了对这些数据的可视化CRUD操作。在MiniUI文档中,主要介绍了4种方式来update数据。
单元格编辑
直接在数据列表中,点击每个单元格直接进行修改,不需要二级界面。在MiniUI中为div添加class="mini-datagrid"
属性即可使用内置的数据表格样式。而设置单元格点击编辑其实十分简单,首先为mini-datagrid的div添加allowCellEdit="true"
和allowCellSelect="true"
,然后在对应的div列的单元格添加input标签并添加property="editor"
属性。具体如下:
在demo中顶部有三个按钮控制数据操作,对应的JavaScript也需要在前端进行处理,不过有现成的grid的API方法可以直接调用。
注意上面的post方法就是指明了要修改服务端的数据。在前面用到的SaveChangedEmployees方法如下,不过我暂时不太明白这个看着像是Java的程序怎么在aspx文件中工作。其中用到的TestDB是Java定义的一个类。
行编辑
在每一行的最前面有三个控制按钮,New, Edit, Delete.增和删与前面一个例子相同,而改则不是通过点击各个单元格修改,而是点击Edit后整行都变为可编辑的input输入框(需设置property="editor"
)。行编辑器html定义如下:
而开始编辑的JavaScript代码也是用到grid对象的API方法,非常方便:
表单提交/弹出面板提交
反正基本套路就是这样,CRUD还有两种内置提供方式可以编辑数据。
表单编辑的html是使用一个隐藏的table表格作为编辑面板,然后利用grid的方法获取原数据,生成表单并嵌入原详细行下方。
需要将原行的数据加载到的动态插入的表单中
弹出窗口的html是用class=”mini-window”的div作为弹出面板来编辑,这就不涉及嵌入原数据行下方的操作了,直接获取原数据填入面板即可。
这两个方法实际上都用到了form表单,所以提交数据可用mini内置对form的处理:
表单控件
数据绑定
前面CRUD中的update时,要想让更新后的数据实时反映在原数据中(不是真的保存到数据库,只是修改显示的数据),就可以使用databinding将表单/控件的数据与原表格绑定。
表单
- 创建表单: 只要你在html中为div设置好了id,就可以利用这个id创建JavaScript中的表单对象。
var form = new mini.Form("#form1");
加载表单: 使用到了jQuery的$.ajax方法。
$.ajax(option)
是jQuery最底层的Ajax实现。所谓最底层是相对于$.load(), $.get(), $.post(), $.getJSON(), $.getScript()这些方法来说的,用$.ajax可以实现所有方法,较为全能。该方法只有一个对象参数,这个对象包含了$.ajax()方法所需的请求设置和回调函数等信息,以键:值的形式给出url(发送请求过去的地址)、type(GET或POST)、data(要传送的键值对形式数据)、success(请求成功后的回调函数)等等参数。下面这里虽然用到的是POST,不过其实是抓数据的,所以没有要上传的data。12345678$.ajax({url: "../data/FormService.aspx?method=LoadData",type: "post",success: function (text) {var data = mini.decode(text); //反序列化成对象form.setData(data); //设置多个控件数据}});提交表单: 必然用到POST,与上面例子相比就需要data来上传了。
123456789101112//提交表单数据var form = new mini.Form("#form1");var data = form.getData(); //获取表单多个控件的数据var json = mini.encode(data); //序列化成JSON$.ajax({url: "../data/FormService.aspx?method=SaveData",type: "post",data: { submitData: json },success: function (text) {alert("提交成功,返回结果:" + text);}});清除表单:
form.clear();
- 重置表单:
form.reset();
- 表单验证: 在input控件中加入
onvalidation="onUserNameValidation"
属性,然后手动编写验证函数绑定过去。当然也可以使用mini-textbox内置的vtype="email"
属性来验证,包括了email、url、int、float、maxLength、minLength、rangeLength、rangeChar、range、date等规则。这些都只是基于控件的验证,随后提交表单时还可以进行一波验证。12345678910111213141516// 绑定validation事件function onUserNameValidation(e) {if (e.isValid) {if (isEmail(e.value) == false) {e.errorText = "必须为合法的邮箱地址";e.isValid = false;}}}// 验证表单var form = new mini.Form("#form1");form.validate();if (!form.isValid()) {alert("表单验证失败!");}
弹出选择表格
使用mini.open弹出子页面,这里就用于弹出带有选择按钮的表格,该子页面存放在url指向的html中。
小部件
这一部分包含了很多控件,多数都是细节,直接查看样例就好了,就不做笔记了。
- Button:按钮
- ButtonEdit:按钮输入框
- TextBox:文本输入框
- ComboBox:下拉选择框
- ComboBox:联动选择
- DatePicker:日期选择框
- Spinner:数字输入框
- TreeSelect:树形选择框
- AutoComplete:输入智能提示框
- TextBoxList:多选输入智能提示框
- CheckBox:复选框
- ListBox:列表控件
- CheckBoxList:复选框组
- RadioButtonList:单选框组
- FileUpload:文件上传控件
树形控件
创建树
实际上都是使用ul实现的,为ul添加class="mini-tree"
属性就可以使用内置的树形控件了。而根据数据树中显示的数据来源,又分为以下四种实现方式。
树形结构: 首先是建立ul控件并添加
class="mini-tree"
。设置url指明树显示的内容来源,拿到的数据就是树形结构的数据。1234567891011121314151617181920<ul id="tree1" class="mini-tree" url="../data/tree.txt" showTreeIcon="true"textField="text" idField="id"></ul>抓回来txt中的树形结构大致如下[{id: "base", text: "Base", expanded: false,children: [{id: "ajax", text: "Ajax"},{id: "json", text: "JSON"},{id: "date", text: "Date"},{id: "control", text: "Control"},{id: "messagebox", text: "MessageBox"},{id: "window", text: "Window"}]},more nodes...]列表结构: 与上面的树形结构的区别在于数据来源的格式以及ul部分属性的微调。注意下方的拿回的txt数据格式以及ul中到底parentField、resultAsTree属性。id与pid是父子关系,拥有pid的元素是子,对应的id是父元素。
123456789101112<ul id="tree2" class="mini-tree" url="../data/listTree.txt"showTreeIcon="true" textField="text" idField="id" parentField="pid" resultAsTree="false"></ul>抓回来txt中的列表结构大致如下,比前面的树形结构更直观好懂一些[{id: "base", text: "Base", expanded: false},{id: "ajax", text: "Ajax", pid: "base"},{id: "json", text: "JSON", pid: "base"},......]本地JSON: 不需要设置url拿数据,而是通过JavaScript以JSON的格式设置树中要显示的数据,这个格式与树形结构的txt是一样的,区别只在于不是url中txt定死的,而是JavaScript来加载。
123<ul id="tree3" class="mini-tree" style="width:300px;padding:5px;"showTreeIcon="true" textField="text" idField="id" ></ul>
|
|
- HTML创建: 这个方法是最原始最直接的想法,用HTML标签把树拼出来。但从下面可以看出来,这个方式就像是普通的无序列表的HTML了,不够简洁。12345678910111213141516171819202122232425262728293031323334353637383940<ul id="tree4" class="mini-tree" style="width:200px;padding:5px;" showTreeIcon="true"><li><span>MiniUI</span><ul><li><span expanded="false">Form</span><ul><li>ComboBox</li><li>DatePicker</li><li>Spinner</li><li>TreeSelect</li></ul></li><li><span expanded="false">Lists</span><ul><li><a href="../datagrid/datagrid.html" target="_blank" style="color:Blue;text-decoration:underline;">DataGrid</a></li><li>Tree</li></ul></li><li><span expanded="false">Layouts</span><ul><li>Panel</li><li>Splitter</li><li>Layout</li></ul></li><li><span expanded="false">Navigations</span><ul><li>Tabs</li><li>NavBar</li><li>Menu</li><li>Pager</li></ul></li></ul></li></ul>
树的懒加载
只有当用户点击了展开才会加载当前树节点的子孙。点击”+”图标时,当前节点的id就会传到后台,不过可以在前台利用onbeforeload在传递之前做一些额外操作再交给后台去加载子孙。服务端则根据Request获取的节点id来搜索数据库取出子节点
|
|
|
|
树的操作
提供了增删改移的内置操作。
为树创建右键菜单
除了利用工具栏按钮的形式操作树的节点,还可以直接在节点上右键弹出菜单进行操作,称之为ContextMenu。ContextMenu的HTML其实就是ul+li的列表,然后要想让右键点击树能够弹出这个ContextMenu,则需要为树的HTML标签添加contextMenu属性。
|
|
导航
MiniUI提供了很多内置方式实现页面切换,如toolbar、菜单、ContextMenu、Tabs选项卡、OutlookBar折叠面板、OutlookMenu折叠菜单、OutlookTree折叠树、Pager分页。
Toolbar工具栏
其实就是div+a的组合,只不过对应地加上MiniUI的class就可以用内置的CSS显示为导航栏。
要复杂点的话可以加入table表格控制内部小按钮靠左靠右(例如用width: 100%)。
菜单
类似于Windows顶部的菜单栏,直接用ul结合url定出菜单中的内容。
ContextMenu
这是右键点击,根据上下文弹出的菜单。前面已经提到了在树的节点上可以实现右键弹出菜单,只需要把contextMenu的id绑定到对应的树就可以了。而这里构建菜单也是类似的,先用ul+li把菜单建起来,然后用JavaScript把菜单绑定到右键点击事件。
|
|
Tabs选项卡
使用div,然后加入class="mini-tabs"
属性即可。每个tabs里面可以是静态1的div定义,也可以使用外部txt来懒加载。每个tab都有很多内置属性可以使用。
Outlook面板系列
- OutlookBar折叠面板: 为div加入
class="mini-outlookbar
属性即可。面板内部的内容直接通过子div提供。 - OutlookMenu折叠菜单: 为div加入
class="mini-outlookmenu
属性,然后提供url导入菜单中要显示的内容即可。 - OutlookTree折叠树: 为div加入
class="mini-outlooktree
属性,然后提供url导入树中要显示的内容即可。1234567891011121314151617181920212223242526272829303132333435363738394041424344454647<!--折叠面板,直接提供内部div的内容--><div id="outlookbar1" class="mini-outlookbar " activeIndex="0" style="width:180px;height:250px;" autoCollapse="true"><div title="权限管理">1</div><div title="用户管理">2</div></div><!--折叠面板中的菜单--><div class="mini-outlookmenu" url="../data/outlookmenu.txt" onitemselect="onItemSelect"idField="id" parentField="pid" textField="text"></div>其中url提供的内容格式和前面通过外部文件定义菜单的方式类似[{ id: "user", text: "用户管理"},{ id: "addUser", pid: "user", text: "增加用户", iconCls: "icon-add", url: "../navbartree/navbartree.html" },{ id: "editUser", pid: "user", text: "修改用户", iconCls: "icon-edit", url: "../buttonedit/openwindow.html" },{ id: "removeUser", pid: "user", text: "删除用户", iconCls: "icon-remove", url: "../datagrid/datagrid.html" },{ id: "right", text: "权限管理"},{ id: "addRight", pid: "right", text: "查询权限", iconCls: "Note", url: "../navbartree/navbartree.html", iconPosition: "top" },{ id: "editRight", pid: "right", text: "操作权限", iconCls: "Reports", url: "../buttonedit/openwindow.html", iconPosition: "top" }]<!--折叠面板中的树--><div id="leftTree" class="mini-outlooktree" url="../data/outlooktree.txt" onnodeselect="onNodeSelect"textField="text" idField="id" parentField="pid"></div>其中url提供的树的txt内容格式与前面提过的类似,通过id和pid确定父子关系。[{id: "user", text: "用户管理"},{id: "lists", text: "Lists", pid: "user" },{id: "datagrid", text: "DataGrid", pid: "lists"},{id: "tree", text: "Tree" , pid: "lists"},{id: "treegrid", text: "TreeGrid " , pid: "lists"},{id: "layouts", text: "Layouts", expanded: false, pid: "user"},{id: "panel", text: "Panel", pid: "layouts"},{id: "splitter", text: "Splitter", pid: "layouts"},]
Pager分页
为div加入class="mini-pager"
属性即可。可以为onpagechanged属性提供JavaScript函数进行额外处理。
这篇博客其实可能以后都不会怎么看了,因为人家官网写得也足够详细了,直接参考官方文档就行了。而且大多都是一些控件什么的,用一用就会了,用不着写个博客总结什么思想,弃坑啦。