Upgrade to Pro — share decks privately, control downloads, hide ads and more …

端框架实践和总结

cssrain
September 02, 2014

 端框架实践和总结

端框架实践和总结

cssrain

September 02, 2014
Tweet

More Decks by cssrain

Other Decks in Technology

Transcript

  1. 前端框架的总体思路 模板 + JSON = HTML 特定格式的 HTML模板 + 模板

    解析引擎 G3版:jQuery + jtemplate Web版: handlebars 前端 组件
  2. 前端框架的组件 前端 组件 Web 组件 G3 组件 表格(Grid) 表单(Form) 树(Tree)

    选项卡(Tab) 窗口(Window) 菜单(Menu) 伸缩栏(Accorndion) 报表(Charts) 日期(DatePicker) 日历(Calendar)…… 等待组件(Loading) 选择组件(ActionSheet,picker) 导航标签(Tabs) 滚动条(Scroll) 登陆(loginControl) 信息提示(Alert,confirm等) 旋转木马(Carousel) 开关组件(Switch) ……
  3. 表格Grid-前端 HTML: <table id="grid"></table> JS : $('#grid').omGrid({ dataSource : 'res/data/sp-doing-grid.json',

    colModel : [ {header : 'ID', name : 'id', width : 20, align : 'center'}, {header : '设备类型', name : 'label', width : 50, align : 'center'}, {header : '创建人', name : 'createName', align : 'left', width : 50}, {header : '创建时间', name : 'cDate', align : 'left', width : 80} ] });
  4. 表格Grid-后端 JSON: { "rows":[ {“id”:1,“type”:“1”,“label”:“LED“ … }, {“id”:1,“type”:“1”,“label”:“LED“ … },

    {“id”:1,“type”:“1”,“label”:“LED“ … }, {“id”:1,“type”:“1”,“label”:“LED“ … } ], "total":16 }
  5. 树Tree-前端 HTML: <ul id="mytree"></ul> JS : $('#mytree').omTree ({ dataSource :

    'res/data/sp-tree.json', showCheckbox: true, onBeforeExpand : function(node){ …… } });
  6. 表单Form - 前端 //表单验证 var v = $("#atmForm").validate({ rules: {

    playContentTitle: {required: true}, playContent: {required: true}, …… }, messages: { playContentTitle: {required: '标题不能为空!'}, playContent: {required: '播放内容不能为空!'}, …… }, });
  7. 文件上传- 前端 HTML: <div id="swfupload-control" > <input type="button" id="button" />

    </div> JS: $('#swfupload-control').swfupload({ upload_url: "upload.php", file_size_limit : "10240", file_types : "*.*“ })
  8. 等待组件 Loading – 分类 等待组件分为:  遮盖层等待控件 loadingBox;  容器内的等待控件

    loadingContainer; 1. loadingBox 即通过使用一个遮盖层盖住整个window,然后弹出一个 box,显示等待信息。多用于整个页面跳转的时候,防止 可以防止用户进行误操作。 2. loadingContainer 即讲一个loading组件放入一个dom容器,在该容器内进 行loading组件的显示隐藏。多用于ajax局部刷新容器内容 的时候使用,提高用户体验。
  9. 遮蔽层等待组件 loadingBox – 前端 使用方法 var loading = new $.loadingBox(message);

    默认显示的提示文字是“Loading…”,可以通过传 message(选填)来控制loading控件显示的提示文字。
  10. 容器内的等待组件 loadingContainer – 前端 使用方法 var loading = new $.loadingInContainer(container,

    message); container是必须的参数,设置该等待控件是放置在那个容器中。 默认显示的提示文字是“Loading…”,可以通过传入 message(选填)来控制loading控件显示的提示文字。
  11. 数据选择组件 picker – 前端 使用方法 var picker = new $.picker(data,

    fn); data(必填)用于加载数据,可加载多个数据列表,并设定列表 所占的宽度及样式,其中宽度可以使用“80%”、“80px”,也 可以使用类似-webkit-box-flex的比例算法。 fn(选填)用于执行选择数据后的回调函数, 可以获取传回的选择 结果,多项数据列表传回的是一个数组 使用实例: var picker = new $.picker([ { data: [1, 2, 3, 4, 5, 6, 7, 8, 9, 0], width: “80%” }, { data: ["A", "F", "B", "I", "U", "W", "N", "C", "M"], css: “text-align: left”} ], function(params) { //todo something for params });
  12. 登陆组件 loginControl – 前端 使用方法$.loginControl(container, options); Container(必填),设置该登陆控件是放置在哪个容 器中。而该容器则需要由用户自己设定所在的位置。 options(选填),其中包含了用户名输入框的属性, 密码输入框的属性,登陆时的提示信息,及登陆操作时的

    ajax参数。 $.loginControl($(“#login”), { username: {inputType: “tel”, maxlength: “11”}, password: {placeholder: “请输入密码”}, message: “正在登陆,请稍候…”, ajax: { url: “…”, success: function(){…}} });
  13. 信息提示 messageBox – 分类 信息提示组件分为:  提示控件 alert;  确认控件

    confirm;  信息输入控件 prompt; 1. alert 等同于浏览器的alert事件,加入了iphone的样式。 2. confirm 等同于浏览器的confirm事件。 2. prompt 等同于浏览器的prompt事件,并加入了多种不同输入框 类型的选择。
  14. 提示控件 alert – 前端 使用方法 $.alert(message, completeCallback, title, buttonLabel); message(必填)用于需要显示的提示文字,

    completeCallback(选填)则是点击提示框按钮后触发的callback 事件, title(选填)用于显示提示框的标题,默认显示“提示”, buttonLabel(选填)用于显示提示框按钮的文字
  15. 确认控件 confirm – 前端 使用方法 $.confirm (message, resultCallback, title, buttonLabels);

    message(必填)用于需要显示的提示文字, resultCallback(选填)则是点击确认框确定按钮后触发的 callback事件, title(选填)用于显示确认框的标题, buttonLabels(选填)用于显示确认框按钮的文字,这里有两 个按钮,可以用字符串的形式传入,例如“确定,取消”;也 可以用数组的形式,例如["取消", "确定"]
  16. 确认控件 confirm– 实例 使用实例: $.confirm('The quick brown fox jumped over

    the lazy dog.', function(){ //todo something }, “确认”, “取消,确认”);
  17. 信息输入控件 prompt – 前端 使用方法 $.prompt (message, resultCallback, inputType, title,

    buttonLabels); message(必填)用于需要显示的提示文字, resultCallback(选填)则是点击prompt框确定按钮后触发的 callback事件,此处可通过调用返回的text参数获取输入框的输 入内容, inputType(选填)显示输入框的类型,包括"text", "password", "tel", "textarea",默认为“test”, title(选填)用于显示prompt框的标题, buttonLabels(选填)用于显示prompt框按钮的文字,这里有 两个按钮,可以用字符串的形式传入,例如“确定,取消”; 也可以用数组的形式,例如["取消", "确定"]
  18. 信息输入控件 prompt – 实例 使用实例: $.prompt('The quick brown fox jumped

    over the lazy dog. ', function(text) { //todo something for text }, "password", "输入密码");
  19. 操作选择组件 actionsheet – 前端 使用方法 $.actionSheet(data); 通过B/S实现操作选择功能。 data(必填)用于加载标题,及多项操作的名称,样式类型,和回调函 数 使用实例:

    $.actionSheet({ title: "Move to", list: [ { value: "Compoundee", action: function() { alert($(this).text()) } }, { value: "Noodles", action: function() { alert($(this).text()) } }, { value: "More ...", action: function() { alert($(this).text()) } }, { value: "Trash", highlight: true, action: function() { alert($(this).text()) } } ] }); 其中highlight: true表示该操作按钮显示高亮,用于重点突出。
  20. G3前端框架的实践中的问题  G3终端不同尺寸屏幕导致的样式问题。 解决办法:使用<meta>中的属性进行等比缩放,并配合 css3中的@media属性进行不同尺寸,不同分辨率的样式分类 处理。  在android 3.2系统的平板上,通过jquery获取json和html的 方法,以及动态添加js的方法都存在问题。

    解决办法: 获取json和html可以使用IMUI的$. getFileDate方 法进行获取,动态添加js需要用原生的js代码进行添加。  android原生的纵向滚动条跟js实现的横向滚动条冲突的问题。 解决办法: 在js的滚动条实现中加入上下左右滑动的判断。 如果是左右滑动则进行e.preventDefault(),执行js的滚动事件, 如果是上下滑动,则执行原生的滚动事件。
  21. G3前端框架的总结 此G3框架既可以用于纯B/S的系统开发,也可以用于 C/S + B/S的开发模式。 目前参与开发的G3营业厅项目用的就是C/S + B/S的开 发模式。C/S负责历史记录和跳转动画,滚动条用的也是 原生态的。

    在这样的项目中B/S框架的工作也就相对轻松,包含:  简单快捷的组件调用,实现项目的功能;  数据模板的加载;  动态加载css,js等功能; 目前的终端环境中,纯B/S的项目实现,还是存在很多 的限制。所以C/S + B/S的开发方式还是目前的主流。