Nodom介绍
Nodom.js是什么?
NoDom是一套轻量级的MVVM框架,以模块化为基础,用于构建SPA(Single Page Application)应用,主要服务于WebApp开发。提供基于数据驱动的渲染模式,页面变化只需修改数据即可实现。
目前Nodom.js兼容ES5,不支持ie浏览器(Edge除外)
nodom官网:NoDom-数据驱动渲染MVVM框架

模块
简介
模块是Nodom的核心内容,Nodom开发的每个应用都是从模块开始,所有页面由模块组成,一个页面是一个模块,可能嵌套多个子模块。
模块主要包含两个部分:模版和数据
- 模版用于基本元素的编写,数据用于对模版的渲染,其中模版分为三种方式引入:元素、模版串、模版文件。
- 数据分为两种引入方式:数据对象和数据文件,模版文件和数据文件可以在模块初次使用时动态加载。
用法
1 | <!-- 基本用法 --> |
模型
模型是Nodom的提供者,用于管理整个模块的数据
注意:
模型数据对象必须为json object,如果为数组,数组元素也必须是json object。
view只能使用x-model指令指定的模型数据(如果没有x-model指令,则向上取第一个父view带x-model指令指定的模型数据),不能跨x-model指令取数据。
表达式
Nodom中,双大括号 _{}_ 里面的内容会被解析成表达式。表达式项主要用于获取数据项,计算并渲染到DOM中。表达式支持“(”、“)”、 “*”、 “/”、 “+” 、 “-”、 “>”、 “<”、 “>=”、 “<=”、 “==”、 “===”、 “&&”、 “||” 算数逻辑运算和过滤器运算符“|”。其中过滤器运算符“|”运算法优先级仅低于括号()运算法。
1 | <div class='result code1'> |
过滤器
过滤器以“|”来分隔待过滤内容和过滤器方法,如content|filtermethod,其中date、currency、number、tolowercase、touppercase主要用于表达式过滤,orderBy过滤器主要用于配合数组排序,select用于数组元素过滤。
1 | <div class="root"> |
指令
指令主要包括:model, repeat, if/else, class, show, field(双向绑定), validity(校验), router(路由), 用法是 x-指令名称,如x-model。
model指令
model指令用于给view绑定数据,数据采用层级关系,如:需要使用数据项data1.data2.data3,可以直接使用data1.data2.data3,也可以分2层设置分别设置x-model=’data1’,x-model=’data2’,然后使用数据项data3。
例子: model指令
repeat指令
repeat指令用于给按照绑定的数组数据重复生成多个相同的view,每个view由指定数组索引对应的数据对象或数据进行渲染。使用方式为x-repeat=’items|filter’,其中items为json数组,filter为过滤器。
例子:repeat指令
if/else指令
if/else指令用于进行条件渲染,如果if指令对应条件为真,则渲染该节点下的子节点,如果设置else指令,则条件为假时,渲染else指令对应节点的子节点。其中nodom不支持if…elseif,需要在else中嵌套
例子:if/else指令
class指令
class指令用于按条件给view添加或移除css class。使用方式为x-class=’{class1:condition1,class2:condition2,…}’,当满足condition1时,添加class1,反之则移除class1,condition2处理方式相同。配置内容需符合json格式。
例子:class指令
show指令
show指令用于显示或隐藏view,如果show对应的条件为真,则显示该view,否则隐藏该view。使用方式为x-show=’condition’。
例子:show指令
field指令
field指令用于绑定form表单下的输入类型元素,如input、select、textarea等,可以实现输入元素与数据项之间的双向绑定。
其中:
单选框radio,多个radio的x-field必须设置为同一个数据项,同时需设置value属性,该属性与数据项可能选值保持一致
复选框checkbox,checkbox除了设置x-field外,还需要设置yes-value 和 no-value 属性,分别对应为选中时x-field对应数据项的值和未选中时的值。
下拉列表select,option可以由给定数据用repeat生成,select设置x-field即可。
例子:field指令
validity指令
validity指令用于form表单的数据项校验,该指令对应的view必须放置于form元素下才能正常工作,使用方式为x-validity=’fieldname’,fieldname对应输入框的name属性,表示针对该输入框进行校验,仅支持html5规范中支持的校验规则,包括required、min、max、pattern、type。
使用该指令包,系统会自动生成DD.$validity对象,DD.$validity.check()方法可用于检测对应的form校验是否通过。
例子:validity指令
router指令
路由用于管理模块的加载模块和模块间的切换,类似于(但不限于)一个超链接操作后执行页面切换。目前仅支持html5的pushstate和popstate方法,所以路由的支持需要浏览器支持html5。
浏览器刷新
路由切换通过pushstate修改浏览器地址,如www.yourdomain.com/route1/xxx,而你的网站不存在此资源,这个时候进行刷新,服务器会返回404错误,为了服务器能正常返回,可以在服务器配置404错误跳转页面,请参考各应用服务器配置说明。为解决该问题,需要在页面中得到服务器返回的路由路径,并调用DD.Router.start方法进行路由跳转
参数路由
路由可以带参数进行传递,以“/:参数名”方式进行定义,如/path/:param1/:param2,使用时x-route=’/path/:v1/:v2’,这样在当前模块可以使用$route.data[‘param1’] 得到v1。
路由嵌套
路由设置子路由,在设置x-route指令时,需要从根路由到子路由的每一级路径合并在一起。如父路由r1路径为“/route1”,r1的子路由r2路径为“/route2”,r2的子路由r3的路径为“/route3”,则x-route=’/route1/route2/route3’才能访问到路由r3,加载方式为,先加载并渲染r1对应的模块,然后加载并渲染r2对应的模块,最后加载并渲染r3对应的模块。
切换效果设置
路由切换支持动画效果,NoDom支持左右滑动的切换效果,需在路由使用前设置DD.Router.switch.style=’slide’,该配置项设置路由切换效果为滑动,默认为none,DD.Router.switch.switcType=’0.5s’,该配置为滑动时长为0.5秒,默认为1s。
路由创建
可通过DD.createRoute(config)创建一个或多个路由对象。config可以为一个参数对象,返回创建的路由,也可以为参数对象数组,无返回。参数对象配置参考配置对象参数说明。
1 | <div> |
event
NoDom提供了专门的事件类DD.Event,用于处理view的事件操作。类似于指令用法,事件用e-开头,如e-click,e-touchstart等,事件支持所有的html元素标准事件。事件处理方法必须在模块的methods中定义,事件方法会自带三个参数 event(事件)、viewdata(触发事件的view对应的数据对象)、view(视图),this指向model(模型)。
NoDom提供了触屏操作事件,包括tap(点击)、swipeleft(左滑)、swiperight(右滑)、swipeup(上滑)、swipedown(下滑)。
NoDom支持delg(事件代理)、nopopo(禁止冒泡)、once(单次执行)配置。
1 | <div class='result code1'> |
API
详见官网API,Nodom API