# ViewxJS **Repository Path**: silis/ViewxJS ## Basic Information - **Project Name**: ViewxJS - **Description**: ViewxJS是一款构建用户界面的JS框架,可适用于前后端双MVC模板引擎的整合创新的有利条件,继承微信小程序模板引擎的精简易学、功能俱全的优良特质,并始终惯彻地为开发者考虑体积大小、运行速度、兼容性等技术性需求,以达到最佳的技术适用性与创新性条件。 - **Primary Language**: JavaScript - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 22 - **Forks**: 1 - **Created**: 2021-01-01 - **Last Updated**: 2022-11-25 ## Categories & Tags **Categories**: webframework **Tags**: MVC, MVVM, 前端, 模板引擎, View ## README

logo

[![star](https://gitee.com/silis/ViewxJS/badge/star.svg?theme=dark)](https://gitee.com/silis/ViewxJS/star) [![fork](https://gitee.com/silis/ViewxJS/badge/fork.svg?theme=dark)](https://gitee.com/silis/ViewxJS/fork) [![license](https://img.shields.io/badge/license-MIT-green)](https://gitee.com/silis/ViewxJS/license/mit) [![free](https://img.shields.io/badge/授权-商用永久免费-green)](https://gitee.com/silis/ViewxJS/free)
#### 介绍 ViewxJS是一款构建用户界面的JS框架,可适用于前后端双MVC模板引擎的整合创新的有利条件,继承微信小程序模板引擎的精简易学、功能俱全的优良特质,并始终惯彻地为开发者考虑体积大小、运行速度、兼容性等技术性需求,以达到最佳的技术适用性与创新性条件。 ###### 产生背景 1. 微信小程序是ViewxJS产生的引火线之一,它的模板语法相比vue几乎十分完美,表现出精简易学,功能俱全。然而,微信小程序的模板引擎无法脱离微信单独使用在其它地方。 2. 在中国的软件大背景下,依然有着大量的软件公司使用着asp.net、jsp、php等传统后端模板引擎。因此急需要一种前后端双MVC模板引擎的创新架构的可能性,vue语法没有考虑好与传统模板技术相结合,即无法较平滑的技术迭代过度,也无法为解决此背景下问题寻求创新的技术解决方案。 ###### 特点: 1. 纯前端mvc模板 2. 很小:仅8k 3. 很快:采用vx编译机制 4. 兼容:IE5 5. 易学:接口与潮流相近 6. 控件整合:可与.net自定义控件、jsp自定义标签等动态网页组件技术整合。 7. 模型整合:可与.net winform、struct、asp mvc、spring mvc等动态网页的模型整合。 ###### 比较: | 比较项 | viewx | vue | |---|---|---| | 动态编译 | 支持 | 支持 | | 动态编译效率 | 更快 | 快 | | 运行效率 | 快 | 更快 | | 文件大小 | 8k | 30k-100k | | 自定义组件 | 支持 | 支持 | | 兼容IE5-8 | 支持 | 不支持 | | .net控件与viewx组件融合 | 支持 | 不支持 | | .net mvc与viewx mvc融合 | 支持 | 不支持 | | MVC | 支持 | 支持 | | MVVM(双向绑定) | 支持 | 支持 | ###### 能具体做什么? 1. viewx体积仅8K的,在移动端可以做下载速度更快的用户体验。 2. 可与传统的动态网页组件技术(.net winform、jsp自定义标签),进行技术整合使用。如: 3. 可与传统的动态网页模型技术(.net winform、struct、asp mvc、spring mvc),进技技术整合使用。 ###### 未公布细节 1. 构建基于ViewxJS的前端自定义组件(已实现50多个控件,应用测试中未公布,代号为ViewxUI.JS) 2. 构建基于ViewxJS的后端ASP.NET控件(已实现50多个控件,应用测试中未公布,代号为ViewxUI.NET) 3. 构建ViewxMVC.JS、ViewxWebformMVC.NET、ViewxResponseMVC.NET、ViewxPushMVC.NET的前后端四MVC模板引擎架构体系(已实现,应用测试中未公布) #### 安装 ``` npm i silis-viewjs ``` > 暂不推荐用npm安排,作者目前很少更新npm,直接在gitee下载 #### 文件大小 |文件名|文件大小|文件说明| |--|--|--| |viewx.min.js.zip|3k|js代码压缩 + zip压缩,用于网络要求更高的生产运营环境| |viewx.min.js|6.8k|js代码压缩,用于生产运营时使用| |viewx.js|17k|js源代码,用于开发测试时使用| |jsc.min.js|2.9k|用于兼容低版本浏览器,如:IE5.5-IE8.0| #### 兼容浏览器版本 | 电脑端 | 浏览器 | 最小版本 | |-|-|-| | ![Internet Explorer](https://developer.mozilla.org/static/media/internet-explorer.cf17782c.svg "Internet Explorer")| Internet Explorer | 5.5 | | ![Chrome](https://developer.mozilla.org/static/media/chrome.4c570865.svg "Chrome")| Chrome | 1 | | ![Edge](https://developer.mozilla.org/static/media/edge.40018f6a.svg "Edge") | Edge | 12 | | ![Firefox](https://developer.mozilla.org/static/media/firefox.51d8a59c.svg "Firefox") | Firefox | 3 | | ![Opera](https://developer.mozilla.org/static/media/opera.a0ab0c50.svg "Opera") | Opera | 15 | | ![Safari](https://developer.mozilla.org/static/media/safari.3679eb31.svg "Safari") | Safari | 4 | | 手机端 | 浏览器 | 最小版本 | |-|-|-| | ![WebView Android](https://developer.mozilla.org/static/media/android.7d9bf320.svg "WebView Android") | WebView Android | 1 | | ![Chrome Android](https://developer.mozilla.org/static/media/chrome.4c570865.svg "Chrome Android") | Chrome Android | 18 | | ![Firefox Android](https://developer.mozilla.org/static/media/firefox.51d8a59c.svg "Firefox Android") | Firefox Android | 4 | | ![Opera Android](https://developer.mozilla.org/static/media/opera.a0ab0c50.svg "Opera Android") | Opera Android | 14 | | ![iOS Safari](https://developer.mozilla.org/static/media/safari.3679eb31.svg "iOS Safari") | iOS Safari | 3.2 | | ![Samsung Internet](https://developer.mozilla.org/static/media/samsung-internet.6fd7f423.svg "Samsung Internet") | Samsung Internet | 1.0 | > 兼容IE5.5-IE8浏览器,需要引用/lib/jsc.min.js。(如果不需要兼容低版本浏览器,则不需要引用jsc库) #### 编译原理 1. 通过document.getElementsByClass("vx"),寻找需要编译的标签 2. 通过带"vx-"前缀的属性名,寻找需要编译的属性 3. 通过document.getElementsByTagName("vx"),寻找需要编译的文本内容 > viewx的编译原理,使得动态编译很快,可以考虑不需要预编译。 #### 动态编译嵌套模板 > 可能一些特殊的开发场景,使用动态编译比预编译更方便。
> 如:把自定义模板存放在表中,通过ajax获取模板内容,通过嵌套模板(vx-inner-html),动态编译模板并展示。 ``` 动态编译嵌套模板:
``` ## 示例 #### say hello 演示最简单的例子say hello ``` {{name}} say hello ``` 示例文件:/demo/say-hello.html #### page onload 演示页面的加载事件,onload事件是页面生命周期的初始方法。 ``` ``` 示例文件:/demo/page-onload.html #### setData 演示通过setData控制数据模型更新视图。 ``` current time : {{time}} ``` 示例文件:/demo/set-data.html #### page observers 演示通过page的observers属性,监听页面数据变化 ``` ``` 示例文件:/demo/observers.html #### 循环 ```
name:{{item.name}}, index:{{index}} , 奇数行 , 偶数行
``` 示例文件:/demo/for.html #### 条件 ```
{{show}}
Hi, {{name1}}!
Hi, {{name2}}!
Hi, {{name3}}!
``` 示例文件:/demo/if.html #### 绑定事件 > catch指阻止冒泡的绑定事件 ```
{{output}}
``` 示例文件:/demo/catch-event.html > bind指带冒泡的绑定事件 ```
{{output}}
``` 示例文件:/demo/bind-event.html #### 双向绑定 - 单向绑定值,使用“vx-”,单横杆表示单向 - 双向绑定值,使用“vx--”,双横杆表示双向 ```
录入值:
模型值:{{value}}
设置值:
``` 示例文件:/demo/two-way.html #### 自定义组件 ``` ``` 示例文件:/demo/component.html