cola-ui的使用
[toc]
> 官方:[http://www.cola-ui.com](http://www.cola-ui.com)
>
> 教程位置:[http://www.cola-ui.com/guide/model](http://www.cola-ui.com/guide/model)
>
> API: [http://www.cola-ui.com/api/cola.html](http://www.cola-ui.com/api/cola.html) , [http://legacy.cola-ui.com](http://legacy.cola-ui.com)
>
> 组件地址:[http://www.cola-ui.com/docs/button](http://www.cola-ui.com/docs/button)
>
> 源码地址:[https://github.com/Cola-Org/cola-ui](https://github.com/Cola-Org/cola-ui)
## 产品简介
- Cola UI是支持双向数据绑定的一站式前端UI框架。采用了精简的MVVM架构,在确保灵活性的同时尽可能降低对开发者的技术要求。
- Cola UI遵循Mobile First的策略,特别适合于移动设备应用开发。
- Cola UI整合了jQuery和Semantic UI,同时提供更多常用的List、Table、Tree等高级控件。
## 开始
`以上内容都是通过cola-ui官网获得的资料,绝大多数的开发内容可以参考cola-ui官网提供的API进行查阅`
**本文档主要针对于camsi工程中用到的功能或特性,且可能不存在于cola-ui官网提供的API进行整理和说明**
### 组成结构
`通常要基于camsi工程在浏览器渲染出来的页面由三个部分组成,例如:simple01.jade、M.js、simple01Model.js`
#### Jade
`Jade 是一个高性能的模板引擎,它深受 Haml影响,它是用 JavaScript 实现的,并且可以供 [Node](http://nodejs.org/) 使用,你也可以[在此试用](http://naltatis.github.io/jade-syntax-docs/),这里推荐[Jade入门中文文档](http://www.nooong.com/docs/jade_chinese.htm)`
```jade
extends /_page
block body
v-box
flex-box
.content(style="overflow: auto")
c-table(bind="simple01s" dataType="Simple01")
column(property="name")
append scripts
script(src="simple01Model.js")
script(src="simple01.js")
```
dataType的值应该与Js中定义的dataType的值以及Model.js中定义的dataType的值相等
#### Js
`不做描述`
```javascript
cola(function(model) {
model.dataType($DataType.Simple01);
model.describe("simple01s", {
dataType : "Simple01",
provider : {
url : "controller/simple01Service/findPagination?from={{$from}}&limit={{$limit}}",
pageSize : 10,
sendJson : true,
loadMode: 'manual'
}
});
model.set("title", "[(#{simple01})]");
model.action({
test : function() {
cola.alert('test')
}
});
});
```
所有正规的操作包括事件都应该编写在`cola(function(model) { })`中,其中首先需要使用dataType定义当前Js中所有用到的DataType,使用`model.describe`交互后台数据到当前指定model,使用`model.set("", "")`向model交互数据,页面所有用到的事件方法应该存在于`model.action({})`中。
#### Model.js
`由cola-ui定义的前端模型`
```javascript
var $DataType = {
Simple01: {
name: "Simple01",
properties : {
name : {
caption : "[(#{name})]",
dataType : "string"
}
}
}
};
```
`caption`用来标志当前字段的前端显示文本,使用`[(#{ })]`取到当前字段对应的当前语言的国际化翻译。
### 表单相关
#### 表单对国际化的处理
> 在正常情况下,dataType可能会被公用,然后每个字段在每个不同的地方显示的文本标识不一样,这时候可以使用`caption`属性进行操作,例如:`caption=ll.l("name")`**前面提到在Js中国际化使用的是`[(#{ })]`**
#### 表单对日期格式的处理
> 通常需要将当前日期字段进行格式化只需要下面代码即可:
```jade
field(property="birthday")
label
c-datepicker(displayFormat="yyyy-MM-dd" inputFormat="yyyy-MM-dd")
```
将datatype类型为Date的birthday字段的文本显示和选择的日期格式调整为"yyyy-MM-dd"
#### 表单对枚举值的处理
> 我们经常会把一些常规的数据做成枚举值存放在数据库,并把页面的文本输入框改变成为下拉项
页面元素
```jade
field(property="status")
label
c-dropdown(c-items="dictionary('10000')")
```
引入Js
```jade
script(src=basecodeCP + "controller/basecode/codeDetail/findCodeDetails?baseCodeIds=10000")
```
或者
```jade
script(src="controller/basecode/codeDetail/findCodeDetails?baseCodeIds=10000")
```
这样页面会去加载枚举值代码为10000的对应status存放的id对应的文本显示到当前字段,并为当前字段提供下拉项
#### 表单对文本域的处理
> 类似于备注,通常都是用文本框来显示
```jade
fields.cols-1
field(property="remark")
label
c-textarea(rows="3")
```
首先定义当前字段独占一列,使用`c-textarea(rows="3")`表名当前字段独占三列
#### 表单对只读的处理
> 正常场景并不是表单中列出的所有的字段都是手动输入的,比如ID,我们可以使用`readOnly="true"`对每个field进行只读控制,也可以将`readOnly="true"`放在c-form属性里面来控制整个表单只读
#### 表单对省市县级联的处理
Jade
```jade
field(property="country"
label
c-dropdown(c-items="dictionary('CountryCode')" onSelectData="onCountrySelect")
(property="province" caption=ll.l("province") c-readOnly="queryCondition.country != 'CHN'")
label
c-dropdown(c-items="provinces" textProperty="name" assignment="province=kind" onSelectData="onProvinceSel")
field(property="city" caption=ll.l("city") c-readOnly="queryCondition.country != 'CHN'")
label
c-dropdown(c-items="cities" textProperty="name" assignment="city=kind" beforeOpen="beforeCityOpen" onSelectData="onCitySel")
field(property="county" caption=ll.l("county") c-readOnly="queryCondition.country != 'CHN'")
label
c-dropdown(c-items="counties" textProperty="name" assignment="county=kind" beforeOpen="beforeCountyOpen")
```
引入数据字典
```jade
script(src="controller/basecode/codeDetail/findCodeDetails?baseCodeIds=CountryCode")
```
Js
```javascript
cola(function(model) {
model.describe("provinces", {
provider: {
url: "controller/basecode/codeDetail/findCachedCodeDetails",
parameter: {
baseCodeId: "Address",
parentId: "NULL"
}
}
});
model.set("title", "[(#{simple01})]");
model.set("queryCondition", {"country":"CHN"});
model.action({
beforeCityOpen: function () {
var province = model.get("queryCondition.province");
$.ajax("controller/basecode/codeDetail/findCachedCodeDetails?baseCodeId=Address&parentId=" + province, {
type: "get", async: false
}).done(function (result) {
if (result) {
model.set("cities", result);
}
});
},
beforeCountyOpen: function () {
var city = model.get("queryCondition.city");
$.ajax("controller/basecode/codeDetail/findCachedCodeDetails?baseCodeId=Address&parentId=" + city, {
type: "get", async: false
}).done(function (result) {
if (result) {
model.set("counties", result);
}
});
},
onProvinceSel: function (self, arg) {
var queryCondition = model.get("queryCondition");
if(queryCondition.get("province") != arg.data.get("kind")){
queryCondition.set("city", "");
queryCondition.set("county", "");
}
},
onCitySel: function (self, arg) {
var queryCondition = model.get("queryCondition");
if(queryCondition.get("city") != arg.data.get("kind")){
queryCondition.set("county", "");
}
},
onCountrySelect: function (self, arg) {
var selectedItem = arg.data;
if("CHN" != selectedItem.key) {
model.get("queryCondition").set("province", "");
model.get("queryCondition").set("city", "");
model.get("queryCondition").set("county", "");
}
}
});
});
```
### 表格相关
#### 表格对枚举值的处理
> 通常我们都是在表单录入数据,在表格中进行简约展示,所以在表单中录入的下拉枚举值我们需要在表格中使用的时候必须使用获取到的枚举值进行翻译
```jade
column(property="status")
template
div(c-bind="translate('10000',$default)")
```
#### 表格对行内编辑的处理
> 在对于处理一些简单数据的时候我们可以不需要弹出一个复杂的编辑框对当前行的数据进行编辑处理,可以直接在表格进行行内编辑
```jade
c-table(bind="simple01s" dataType="Simple01" readOnly="false")
```
##### 表格行编辑对下拉项的处理
> 在表单编辑我们可以去选择一个下拉项做为数据值,当然在表格行编辑也可以
```jade
column(property="status")
template(name="edit")
c-dropdown(bind="$default" c-items="dictionary('10000')")
```
最后代码整理为
```jade
column(property="status")
template(name="edit")
c-dropdown(bind="$default" c-items="dictionary('10000')")
template
div(c-bind="translate('10000',$default)")
```
#### 表格添加操作列的处理
> 通常我们需要在表格的最后一列添加一行操作列来处理当前行的数据
```jade
c-table(bind="simple in simple01s" dataType="Simple01")
column(caption=ll.l("operation"))
template
div
a.cell-link(c-onclick="view(simple)")=ll.l("view")
```
#### 表格联动的处理
> 很多场景下,我们的数据和数据都是有关联关系,比如一本书对应书籍的出版社的详细信息,这时候针对不同的书本信息联动到出版社的详细信息
因为此处是两个表的关联,所以需要定义两个dataType
cModel.js
```javascript
var $DataType = {
A: {
name: "A",
properties : {
name : {
caption : "[(#{name})]",
dataType : "string",
}
}
},
B : {
name : "B",
properties : {
name : {
caption : "[(#{name})]",
dataType : "string"
}
}
}
};
```
c.jade
```jade
c-table(bind="as" dataType="a")
column(property="name")
c-table(bind="as#.bs" dataType="b")
column(property="name")
```
c.js
```js
cola(function(model) {
model.dataType($DataType.B);
$DataType.A.properties.bs = {
dataType: "B",
aggregated: true,
provider: {
url: "controller/B/find",
sendJson: true,
parameter: {
"name": "{{@name}}"
}
}
}
model.dataType($DataType.A);
model.describe("as", {
dataType : "A",
provider : {
url : "controller/C/findPagination?from={{$from}}&limit={{$limit}}",
pageSize : 10,
sendJson : true,
loadMode: 'manual'
}
});
model.set("title", "[(#{C})]");
model.action({
});
});
```
在关联中可以使用`parameter:{"name":"{{@name}}"}`方式拿到父表中当前选中行的name的值
#### 表格数据加载的处理
> 在某些场景下我们可以让表格数据直接加载到页面,也可以使用事件来触发加载数据
```javascript
loadMode: 'manual'
```
可以通过loadMode来控制表单是否在页面加载的时候加载数据到页面:manual手工加载,注释掉loadMode缺省自动加载数据
### 面板Panel 相关
#### 在panel头位置添加按钮
```jade
c-panel#panelDemo(caption=ll.l("panel"))
template(name="tools")
div
c-button.primary(caption=ll.l("add") click="add")
```
### 其它
#### 预加载处理
> 通常我们会在页面加载完成的时候自动触发一部分方法或者set一部分数据值到指定属性
```javas
cola.ready(function() {
cola.widget("panelDemo").collapse(); // 在加载完页面之后 折叠id为panelDemo的面板
});
```
代码应该放在`cola(function (model) { })`
cola-ui的使用的更多相关文章
- Android之记账本
这个ColaBox记事本是我从网上下载下来的拿来学习一下的(APK下载点这里.) 从登记收入与开支的页面跳转到账单页面运用了SQL数据库的录入,整体表的结构为: db.execSQL("CR ...
- 查看Android应用包名、Activity的几个方法
一.有源码情况 直接打开AndroidManifest.xml文件,找到包含android.intent.action.MAIN和android.intent.category.LAUNCHER对应的 ...
- 【appium】查看Android应用包名、Activity的几个方法
一.有源码情况 直接打开AndroidManifest.xml文件,找到包含android.intent.action.MAIN和android.intent.category.LAUNCHER对应的 ...
- 安卓查看包名,activity方法
https://www.cnblogs.com/wangcp-2014/p/6144530.html 一.有源码情况 直接打开AndroidManifest.xml文件,找到包含android.int ...
- 避免重复造轮子的UI自动化测试框架开发
一懒起来就好久没更新文章了,其实懒也还是因为忙,今年上半年的加班赶上了去年一年的加班,加班不息啊,好了吐槽完就写写一直打算继续的自动化开发 目前各种UI测试框架层出不穷,但是万变不离其宗,驱动PC浏览 ...
- jQuery UI resizable使用注意事项、实时等比例拉伸及你不知道的技巧
这篇文章总结的是我在使用resizable插件的过程中,遇到的问题及变通应用的奇思妙想. 一.resizable使用注意事项 以下是我在jsfiddle上写的测试demo:http://jsfiddl ...
- “四核”驱动的“三维”导航 -- 淘宝新UI(需求分析篇)
前言 孔子说:"软件是对客观世界的抽象". 首先声明,这里的"三维导航"和地图没一毛钱关系,"四核驱动"和硬件也没关系,而是为了复杂的应用而 ...
- ABP框架 - Swagger UI 集成
文档目录 本节内容: 简介 Asp.net Core 安装 安装Nuget包 配置 测试 Asp.net 5.x 安装 安装Nuget包 配置 测试 简介 来自它的网页:“...使用一个Swagger ...
- 06.LoT.UI 前后台通用框架分解系列之——浮夸的图片上传
LOT.UI分解系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#lotui LoT.UI开源地址如下:https://github.com/du ...
随机推荐
- 基于vue开发的多功能的时间选择器组件,开箱即用
好一段时间没有写过博客了,在国庆期间心血来潮优化了一个组件,在日常开发中时常会有需求用到时间选择器,不同的项目需求可能会不一样.近期开发的几个项目中就有需求用到这样的选择器,由于以前有用到相关的组件, ...
- 图像滤镜艺术---(Lightleaks Filter)漏光滤镜
原文:图像滤镜艺术---(Lightleaks Filter)漏光滤镜 (Lightleaks Filter)漏光滤镜 漏光拍摄其实就是一种摄影手法,最初是因为强烈光照导致相片交卷的过分曝光,最终在成 ...
- 【C++】小心使用文件读写模式:回车('\r') 换行('\n')问题的一次纠结经历
原来没有仔细注意C++读写文件的二进制模式和文本模式,这次吃了大亏.(平台:windows VS2012) BUG出现: 写了一个程序A,生成一个文本文件F保存在本地,然后用程序B读取此文件计算MD ...
- java设计模式(2)
工厂模式定义 在面向对象程序设计中,工厂通常是用来创建其他对象的对象,工产模式根据不同的参数来实现不同的分配方案和创建对象. 在工产模式中,我们创建对象时不会对客户端暴露创建逻辑,而且是通过使用一个共 ...
- 1.预处理,生成预编译文件(.文件): Gcc –E hello.c –o hello.i 2.编译,生成汇编代码(.s文件): Gcc –S hello.i –o hello.s 3.汇编,生成目标文件(.o文件): Gcc –c hello.s –o hello.o 4.链接,生成可执行文件: linux笔记
1 动态查看日志 tail -f filename tail -1000f filename 2 解压当前目录内容为xxx.zip zip -r xxx.zip ./* 3 查看内存使用情况 fre ...
- oracle利用透明网关访问mssql
遇到一个客户,有个需求,想将mssql中的数据抽取到oracle中.经过上网查找,感觉gateway这个工具可以实现,因此就搭建实验环境进行测试.首先在oracle delivery上面下载对应的安装 ...
- MongoDB centos安装问题 error while loading shared libraries: libnetsnmpmibs.so.31
安装mongodb-linux-x86_64-enterprise-rhel70-4.0.5 cd /usr/mongodb tar -zxvf mongodb-linux-x86_64-enter ...
- css的双飞翼布局
双飞翼布局的大概意思就是左右两边的内容是固定的,大小是固定的, 而中间的布局的随着页面的大小变化而自动变化的. 通过代码来解析: 1.四个div,也可以使用section,其中main,left.ri ...
- 实现Qt日志功能并输出到文件(使用qInstallMsgHandler安装customMessageHandler)good
原文 http://www.cppblog.com/lauer3912/archive/2011/04/10/143870.html 一.基本分类:qDebug : 调试信息提示qWarning: 一 ...
- Qt 访问网络的 HttpClient(封装QNetworkAccessManager,且有服务端)
Qt 使用 QNetworkAccessManager 访问网络,这里对其进行了简单的封装,访问网络的代码可以简化为: 1 2 3 HttpClient("http://localhost: ...