rubylouvre / avalon.oniui Goto Github PK
View Code? Open in Web Editor NEW基于avalon的组件库
基于avalon的组件库
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<title>spinner demo </title>
<script src="../avalon.js"></script>
</head>
<body>
<div ms-controller="spinner">
<fieldset>
<legend>spinner</legend>
<input ms-repeat-el="list" ms-duplex="el.value" ms-widget="spinner" ms-data-spinner-min="el.min" data-spinner-max="8"/>
</fieldset>
<script>
require(["spinner/avalon.spinner"], function(avalon) {
avalon.define('spinner', function(vm) {
vm.list = [{value:5,min:3,max:6},{value:2,min:3,max:8}]
});
avalon.scan();
})
</script>
</div>
</body>
</html>
Hi @shirlyLoveU,
In the datepicker.js, it's not possible to set default time.
Actually in the source code, https://github.com/RubyLouvre/avalon.oniui/blob/master/datepicker/avalon.datepicker.js#L164 I found that the hour and minite are set to be 0, in that way, I can not set default date+time.
复现方式 dialog/avalon.dialog.ex10.html 添加
data-draggable-ghosting="true"
····
upperCaseName: function(vmId, field, index, cellValue, rowData) {
cellValue = cellValue.toUpperCase()
return ""+cellValue +""
},
····
代码中 ms-attr-id='rowData.name' 原样输出。
不可以这样用么?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<title>datepicker demo </title>
<link type="text/css" rel="stylesheet" href="../highlight/shCore.css"/>
<link type="text/css" rel="stylesheet" href="../style/avalon.doc.css"/>
<script src="../highlight/shCore.js"></script>
<script src="../avalon.js"></script>
</head>
<body>
<div class="demo-show" ms-controller="demo">
<div ms-if="wrap">
<input ms-widget="datepicker"/>
</div>
<button type="button" ms-click="clickToggleWrap">切换容器显示隐藏</button>
{{wrap}}
<script>
require("datepicker/avalon.datepicker", function(avalon) {
var model = avalon.define("demo", function(vm) {
vm.wrap = true;
vm.clickToggleWrap = function(){
model.wrap = !model.wrap;
}
})
avalon.scan();
})
</script>
</div>
</body>
</html>
描述:datepicker外层ms-if变量wrap。
复现步骤:当wrap从false变为true时,datepicker不能显示
期望:datepicker可以随外层容器的显示隐藏,正常显示隐藏
谢谢
其中的双日历框,禁用双日历框切换禁用时好用,双日历框,禁用双日历框禁用组件的时候就会报错(Uncaught TypeError: undefined is not a function ),代码如下:
vm.toggleDisabled = function() {
vm.disabled = !vm.disabled;//好用的
}
vm.setDisabled = function() {//不好用 禁用失败而且还报错
var coupledatepickerVM = avalon.vmodels.a;
coupledatepickerVM.setDisabled(true);
}
<input ms-duplex="p1" ms-widget="spinner" ms-min='8' ms-max='99' />
spinner组件可以在dom中指定最大最小值么?
原生API可以作为组件配置项的一部分。
mmAnimate | 动画引擎,基于Promise | 完成过半, 以后会设计对应指令 |
mmState | 基于状态机的路由系统 | 钟,杨 95% |
avalon移动套装 | avalon.touch, avalon.gesture, avalon.shake, avalon.iscroll) | 杨乾军 基本完成, 现在是直接使用avalon.mobile |
avalon ms-duplex2.0 | 像JAVA的struts框架那样,可以添加N个拦截图,进行数据格式化,验证,光标引导,数据类型转换 | 钟 avalon1.3.9已经集成 |
avalon 视频教材两套 | 陆 基础教程已经完成 | |
avalon验证框架 | 基于avalon ms-duplex2.0 | 钟, 完成 |
avalon树组件 | 杨, 完成 | |
注释转文档工具 | 现在可以处理Oniui的JS文件 | 钟,李, 完成 |
avalon.mask | ms-duplex2.0的一个扩展功能,光标引导用户转入,格式化处理输出 | 完成 |
avalon.upload | 现在只支持图片上传,需要支持更多格式 | 王,徐, 开发中 |
度假,目的地事业部的落地工作 | 完成 | |
页面avalon的VM树 数据化展示工具 | 田,开发中 |
级别 | 评级 | 描述 |
不了解 | D | 没有听说过,没有用过 |
了解 | C | 曾经在别人的辅导下使用过,记得其一点API与参数 |
熟悉/熟练 | B | 独立地使用此技术解决过实际问题,能立即说出其半数API |
精通 | A | 了解此技术一些偏门用法,对其API了如指掌,了解其优缺点与适应范围,并能辅导他人 |
SPA很重要一个需要解决的问题就是视图的嵌套和视图的组合。
先引入jquery再引入avalon
本文将围绕作者半年来在移动前端工程化做的一些工作做的总结,主要从localstorage缓存和版本号管理,模块化,静态资源渲染方式三个方面总结手机百度前端一年内沉淀的解决方案,希望对大家移动开发有所帮助。http://mweb.baidu.com/p/baidusearch-front-end-road.html
想参考写个dialog,结果发现这里
https://github.com/RubyLouvre/avalon.oniui/blob/master/dialog/avalon.dialog.js#L24
if (len > 1) {
var dialogOpts = vmodels[len-1][data.value.split(',')[2]];
avalon.mix(options, dialogOpts);
}
不用考虑这种情况吧,既然avalon.js本身并没有提供组件配置项的继承机制,具体的组件构建也不应考虑,可以通过嵌套ms-controller解决嘛,不然每个组件构建岂不是都要考虑嵌套情况,而且万一里面有嵌套ms-controller,不就和就近取配置项的原则冲突了吗
(2014-11-25,avalon和OniUI均采用今天最新代码,OSX平台,chrome浏览器)
发现avalon.moder.js和OniUI中的datepicker合作使用时,选取设定时间选项,滑动条不改变。
同版本avalon.js不会出现这个问题。同样环境下的safari浏览器不会出现这个问题。
比如
dropdown的model更名为data
grid的dataSource更名为data
这样与checkboxlist等统一起来
onition 的重构(重点,完成当中的三分之一)
颜色选择器 colorpicker
日历 四种 JQ式的双日历, 迷你日历, 单日历, my97风格
下拉框 (先模拟bootstrap的, 以后搞无级分级的,会根据边沿调整位置)
轮播 (163风格的)
http://demo.tutorialzine.com/2011/03/photography-portfolio-shutter-effect/
滚动监听
上传组件
iframe高度自适应组件
验证框架 (基于jvalidator重构)
富文本编辑器(优先级排后)
图标字体库
nodejs <--> AMD 转换工具 (优先级高)
参考
https://github.com/anodynos/uRequire
https://github.com/yinso/amdee
https://github.com/thlorenz/browserify-ftw
手机上常用框架 动画 https://github.com/visionmedia/move.js 滚动条https://github.com/cubiq/iscroll 点击https://github.com/ftlabs/fastclick 切换图片与内容 https://github.com/thebird/Swipe
totoro测试平台的搭建 (avalon API的测试与onition)
avalon在公司的培训(当然让组员去干)
fekit的重构(待完成fekit,grunt与gulpjs的源码解读后动工)
http://2014.html5dw.com/topic售签
fontawesome.io icon字体 貌似只有taobao和腾讯有一个平台,大公司都注重工具盒组件开发的
http://fex.baidu.com/blog/2014/04/fis-static-resource-management/
模拟这个 http://ux.etao.com/page2012 做展示页面
JSCritic - JS代码质量检测工具 http://jscritic.com/
富文本编辑器中粘贴图片时,chrome可以得到e.clipBoardData.items并从中获取二进制数据,以便ajax上传到后台,实现粘贴图片的功能。firefox中items为undefined,可选的方案:1将base64原样上传到后台进行文件存储替换,2将内容清空,待粘贴完毕后取图片src,再恢复现场http://stackoverflow.com/questions/2176861/javascript-get-clipboard-data-on-paste-event-cross-browser
作为iframe页面中的Dialog组件显示时,如果iFrame的高设置不合理,对话框显示的位置也不是很好.能否有好的办法解决呢
function fireKeyUp(elem, keyCode) {
//https://gist.github.com/termi/4654819
var oEvent
try {
// FF
oEvent = document.createEvent("KeyEvents")//firefox
oEvent.initKeyEvent("keyup", true, true, document.defaultView, false, false, false, false, keyCode, 0)
} catch (ex) {
try {
//http://www.w3.org/TR/DOM-Level-3-Events/#idl-interface-KeyboardEvent-initializers
oEvent = document.createEvent("KeyboardEvent")
Object.defineProperty(oEvent, 'keyCode', {
get: function() {
return this.keyCodeVal;
}
});
Object.defineProperty(oEvent, 'which', {
get: function() {
return this.keyCodeVal;
}
});
oEvent.initKeyboardEvent("keyup", true, true, document.defaultView, false, false, false, false, keyCode, keyCode)
oEvent.keyCodeVal = keyCode
} catch (ex3) {
}
}
if (oEvent) {
elem.dispatchEvent(oEvent)
} else if (document.createEventObject) {
//http://stackoverflow.com/questions/7518664/how-can-i-generate-a-keyup-event-with-a-specific-keycode-in-ie8
oEvent = document.createEventObject("KeyboardEvent");
oEvent.keyCode = keyCode;
elem.fireEvent("onkeyup", oEvent);
}
}
在avalon.resizable.doc.html页面中的第97接口方法与固有属性,这里应该是,在第103行startResizeWidth/startResizeHeight</td0 > 被调整大小的元素最开始时的宽高中的“</td0 > ”应该写成0
http://www.text-image.com/convert/ascii.html
上传图片,生成ascii图
http://patorjk.com/software/taag/#p=testall&f=Graffiti&t=ooxx
填写文本,生成ascii图
中文搞成图片然后用工具1
http://rapheal.sinaapp.com/2014/11/06/javascript-error-monitor/
window.onerror = function(msg,url,line,col,error){
//没有URL不上报!上报也不知道错误
if (msg != "Script error." && !url){
return true;
}
//采用异步的方式
//我遇到过在window.onunload进行ajax的堵塞上报
//由于客户端强制关闭webview导致这次堵塞上报有Network Error
//我猜测这里window.onerror的执行流在关闭前是必然执行的
//而离开文章之后的上报对于业务来说是可丢失的
//所以我把这里的执行流放到异步事件去执行
//脚本的异常数降低了10倍
setTimeout(function(){
var data = {};
//不一定所有浏览器都支持col参数
col = col || (window.event && window.event.errorCharacter) || 0;
data.url = url;
data.line = line;
data.col = col;
if (!!error && !!error.stack){
//如果浏览器有堆栈信息
//直接使用
data.msg = error.stack.toString();
}else if (!!arguments.callee){
//尝试通过callee拿堆栈信息
var ext = [];
var f = arguments.callee.caller, c = 3;
//这里只拿三层堆栈信息
while (f && (--c>0)) {
ext.push(f.toString());
if (f === f.caller) {
break;//如果有环
}
f = f.caller;
}
ext = ext.join(",");
data.msg = error.stack.toString();
}
//把data上报到后台!
},0);
return true;
};
扯一扯前端css的整体架构设计:(2)base基础类的那些事儿 http://www.cnblogs.com/limingxi/p/3710600.html
这个例子中的日期范围框setDate,当点击日历的时候可以选择开始日期和结束日期,但是当点击开始和结束之后,确定,却发现开始日期更新了,结束日期显示的还是上一次的日期,并没有更新,要想改变,需要再次点开日历 只点击结束日历 选择一个日期 确定之后 结束日期才会更新为选中的日期。
var rtag = /<\w+\b(?:(["'])[^"]*?(\1)|[^>])*>/i
function getTableHeight(table, rowNumbers) {
var tableStart = table.outerHTML.match(rtag)[0]
var tbody = table.getElementsByTagName("tbody")[0]
var tbodyStart = tbody.outerHTML.match(rtag)[0]
var tr = tbody.getElementsByTagName("tr")[0]
var trStart = tr.outerHTML.match(rtag)[0]
var td = tr.cells[0]
var tdStart = td.outerHTML.match(rtag)[0]
var tdEnd = "</" + td.tagName.toLowerCase() + ">"
var start = tableStart + tbodyStart + "\n"
var end = "</tbody></table>"
var row = trStart + tdStart + " " + tdEnd + "</tr>"
var html = ""
for (var i = 0; i < rowNumbers; i++) {
html += row + "\n"
}
html = start + html + end
var div = document.createElement("div")
div.innerHTML = html
var newTable = div.getElementsByTagName("*")[0]
newTable.style.position = "absolute"
newTable.style.visibility = "hidden"
table.parentNode.appendChild(newTable)
var ret = newTable.offsetHeight
table.parentNode.removeChild(newTable)
return ret
}
var height = getTableHeight(table, 30)
var rowHeight = ( height -1 ) / 30
需求是Submit之前需要进行业务逻辑校验。如不满足就不关闭,继续处理。如何实现
TypeError: parseHtmlStruction[1] is undefined
cssText = parseHtmlStruction[1].replace(/</?style>/g, ""),
当表格的父容器设置了overflow:scroll,并且表头已经滚动到父容器的上方隐藏区域,此时通过滚动body的方式设置表头出现范围失效。
在不需要动画的情况下,建议使用scrollIntoView方法。
form元素可作为验证的根节点,对属于它并且设置了验证属性的元素做验证。
表单控件可以成组进行验证, 常见的形式是依赖或是决策(可见下文)。
表单控件有多种类型,常见的有input,textarea,radio,checkbox,select
若表单控件A与表单控件B有如下的关系,则称B依赖A:
即,当B做验证时,要依赖A的取值,在真实场景中,在用户注册页面,有输入框:“密码”,“确认密码”,可称“确认密码”依赖“密码”,如:
若表单控件A与表单控件B有如下关系,则称A决策B:
即,当A的取值改变时,将改变B的验证规则。在真实场景中,在用户注册页面,有选项卡“电话”,“邮箱”,有输入框,当“电话/邮箱”选项卡进行切换时,将改变输入框的验证规则,可称“电话/邮箱”决策,如:
依赖与决策的区别是,决策会改变元素的验证规则,而依赖只改变验证结果。
cirecleR --> cirecleRadius,
success --> readyState
right的意义不明
vm.full 的意义不明
vm.d 的意义不明
1.这里的切换日历的禁用与否,点击右侧的按钮切换禁用,发现并没有效果,
vm.toggleDisabled = function() {
console.log(vm.disabled);//这里想打印出来 但是无论如何点击,都打印true
var datepicker = avalon.vmodels.a;
datepicker.setDisabled(!model.disabled);
model.disabled = !model.disabled;
}
并且每次打印true之后都会报错 Uncaught TypeError: undefined is not a function
2./avalon.datepicker.ex9.html中的手动输入日期使输入域失去焦点,看看date的变化例子中,当输入2014-00-00失去焦点后会显示2013-11-30 而在这之后在输入所有的无效不符合日期格式的时候都会显示2013-11-30 这时在输入2013-00-00 失去焦点后会变成2012-11-30 如此可以循环下去
http://wiki.corp.qunar.com/pages/viewpage.action?pageId=42893679
考核点 | 比例 | 目标 | 说明 |
---|---|---|---|
数量 | 35% | 11 | 开发数量 与 投入数量 (转化率) 旧的适配器的升级 |
质量 | 25% | 组件中的某个功能交付delay率,onion ui的迁移成本(即与旧接口的兼容性),BUG, 文档覆盖度, 性能,旧UI库的维护 | |
推广 | 20% | 4次 | 组内培训 |
服务 | 20% | 当天响应(决定能做或不能做),能的话最迟一星期内搞定 | 响应速度 |
先定义一个英文字体再定义中文字体,这是因为英文字体中一般不含有中文,执行的时候英文和阿拉伯数字选用“Arial”,中文的字体使用第二个字体“微软雅黑”。比如,可以这样来定义WordPress中的中英文字体:
body{
font-family: Arial,"微软雅黑";
}
*需要注意的是,这样的做法对符合网页规范的浏览器比如Firefox虽然有效,但对IE6、IE7会导致中文字体设定无效,也就是说,这样的办法对于微软的IE系列来说等于不设置中文字体,而只是采用系统默认的“宋体”来显示网页内容。
也可以指定两个class分别分配给中文和英文内容,这样就可以对IE也实现如上的字体效果,并可以为中英文的显示进行更详细的定制(比如字号等属性),但缺点是这样的做法比较繁杂,使用上不太方便,特别是对博客这样的中英文混编的文章内容来说更是麻烦。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.