`

mini mvvm 简单实现版

 
阅读更多

mini mvvm 简单实现版,代码有待改进

 

<html>
<head>
	<title>mini-mvvm</title>
</head>
<body>
<div id='app'>
  <p>
    My name is {{firstName + ' ' + lastName}}, I am {{age}} years old.
  </p>
</div>

<script type="text/javascript">
	const bindViewToData = ((el, data) => {
		let source = el.innerHTML;
		let updateTextArray = [];
		let updateText = (el) => {
			el._textContent = el._textContent || el.textContent;
			el.textContent = el._textContent.replace(/\{\{([^\{\}]+)\}\}/gm, ($0, $1) => {
				return new Function('data','with(data){return ' + $1+'}')(data);		
			});
		};
		let update = () => {
			let findChild = (el) => {
				var childs = el.childNodes;
				if(childs){
					childs = Array.prototype.slice.apply(childs);
					for (var i = childs.length - 1; i >= 0; i--) {
						if(childs[i].nodeType === 3){
							updateText(childs[i]);
						}else if(childs[i].childNodes){
							findChild(childs[i]);
						}
					};
				}
			};
			findChild(el);
		};
		update();

		for(var k in data){
			data._data = data._data || {};
			if(data.hasOwnProperty(k)){
				data._data[k] = data[k];
				Object.defineProperty(data, k, {
					get: (function(k){
						return function(){
							return this._data[k];
						}
					})(k),
					set: (function(k){
						return function(val){
							if(this._data[k] !== val){
								this._data[k] = val;
								update();
							}
						};
					})(k)
				});
			}
		}
	});

	const appData = {
	  firstName: 'Lucy',
	  lastName: 'Green',
	  age: 13
	}
	bindViewToData(document.getElementById('app'), appData)

	// div 里面的 p 元素的内容为
	// My name is Lucy Green, I am 13 years old.

	appData.firstName = 'Jerry'
	appData.age = 16

	// div 里面的 p 元素的内容自动变为
	// My name is Jerry Green, I am 16 years old.
</script>
</body>
</html>

 

分享到:
评论

相关推荐

    Mvvm简易实现,欢迎交流

    **Mvvm 模型-视图-ViewModel 框架简易实现** 在现代 Web 开发中,MVVM(Model-View-ViewModel)架构模式被广泛应用于构建用户界面,尤其是前端应用。Vue.js 是一个非常流行的 MVVM 框架,其设计理念是数据驱动和...

    用MVVM架构实现的计算器小程序实例,供WPF和MVVM初学者参考.

    用MVVM架构实现的计算器小程序实例, 包括MVVM架构的命令对象和消息通知对象,小计算器加减乘除的实现逻辑.页面布局等简单知识.供WPF和MVVM初学者参考. 参考代码: /// /// 加法命令 /// public BaseCommand Add...

    TypeScript accomplish MVVM pattern(TypeScript实现MVVM)

    使用TypeScript创建MVVM框架模型,以此来开发大型的windows应用商店程序或者其它web程序。 Use TypeScript to accomplish MVVM pattern to develop windows store app or other web application.

    MVVM简易框架搭建

    在这个“MVVM简易框架搭建”的主题中,我们将深入探讨MVVM架构的基本原理、组件职责以及如何在实际项目中应用。 **1. MVVM模式介绍** MVVM由三个主要部分组成:Model(模型)、View(视图)和ViewModel(视图模型)...

    一步一个脚印实现一个自己的简易MVVM框架

    本教程将带你一步步实现一个自己的简易MVVM框架,以加深对这一模式的理解。 首先,我们要理解MVVM模式的基本概念。MVVM的核心思想是解耦视图(View)与模型(Model),通过ViewModel作为桥梁进行通信。Model负责...

    WPF MVVM实现简易登录,页面跳转等功能

    在本文中,我们将深入探讨如何使用C#语言和Windows Presentation Foundation(WPF)框架,结合Model-View-ViewModel(MVVM)设计模式来实现一个简易的登录功能,并且包括页面跳转等操作。WPF是.NET Framework的一个...

    基于Avalonia+MVVM实现的仿网易云UI界面

    基于Avalonia+MVVM实现的仿网易云UI界面;基于Avalonia+MVVM实现的仿网易云UI界面;基于Avalonia+MVVM实现的仿网易云UI界面;基于Avalonia+MVVM实现的仿网易云UI界面;基于Avalonia+MVVM实现的仿网易云UI界面;基于...

    剖析vue实现原理自己动手实现mvvm

    通过以上步骤,你可以理解Vue.js如何实现MVVM模式,并能构建一个基础版的MVVM框架。这个过程不仅有助于深入理解Vue的内部机制,还能提升你对JavaScript和前端开发的整体认知。 在实践过程中,可能会遇到一些挑战,...

    lua实现cocos2d-x的mvvm框架

    MVVM源于MVC(Model-View-Controller)模式,...MVVM本质就是基于操作数据来操作视图进而操作DOM,借助于MVVM无需直接操作DOM,开发者只需完成包含声明绑定的视图模板,编写ViewModel中有业务,使得View完全实现自动化。

    MVVM在Winform应用实例

    这个实例可能展示了如何在Winform环境中手动实现或模拟MVVM模式。 **描述分析:** 描述中提到的“simpleButton1点击后,再点击simpleButton2显示textEdit1的值”,这是对一个基本交互场景的描述,涉及到用户界面的...

    MVVM简单的实例

    总之,`MVVM简单的实例`是一个理想的入门教程,帮助初学者理解这种模式如何工作,以及如何在实际项目中应用MVVM来提升开发效率和代码质量。通过实践`MvvmTest`项目,学习者可以掌握MVVM的基本概念和操作,为后续更...

    WPF MVVM 实现进度条

    本篇文章将详细探讨如何在WPF MVVM架构下实现一个进度条功能。 首先,我们需要理解MVVM模式的基本组件。Model是业务逻辑层,负责处理数据和业务规则;View是用户界面,与用户交互;ViewModel作为Model和View之间的...

    MVVMLight页面跳转WPF

    MVVMLight是由GalaSoft开发的一个轻量级MVVM(Model-View-ViewModel)框架,它为WPF和UWP提供了很多便利,包括事件代理、依赖属性助手、以及简单易用的页面导航服务。 首先,我们需要理解MVVM模式。这是一种设计...

    TreeView+MVVM实现“多选”

    在本文中,我们将深入探讨如何使用MVVM(Model-View-ViewModel)模式和依赖属性来实现WPF(Windows Presentation Foundation)中的TreeView控件的多选功能。MVVM是一种设计模式,它鼓励分离关注点,使应用程序更易于...

    wpf中MVVM模式下窗体跳转及显隐控制实现

    本文将详细探讨在MVVM模式下如何实现窗体间的跳转、窗体的拖动以及窗口的显隐控制。 1. MVVM模式简介 MVVM模式的核心思想是解耦视图和业务逻辑,通过数据绑定将View与ViewModel连接,ViewModel再与Model交互。这样...

    WPF+Mvvmlight 简单的导航实例

    在本文中,我们将深入探讨如何使用WPF(Windows Presentation Foundation)框架结合MvvmLight库创建一个简单的导航实例。MvvmLight是由GalaSoft开发的轻量级MVVM(Model-View-ViewModel)库,它为WPF应用提供了一...

    基于Prism的MVVM简单实例

    在“基于Prism的MVVM简单实例”压缩包中,你将找到源代码文件,包括View的XAML文件、ViewModel的C#文件以及可能的Model实体类。通过阅读和分析这些代码,你可以更好地理解Prism框架如何与MVVM模式结合,以及如何实现...

    WPF MVVM DataGrid分页案例

    在本文中,我们将深入探讨如何在WPF(Windows Presentation Foundation)环境中使用MVVM(Model-View-ViewModel)架构实现DataGrid的分页功能。MVVM是一种流行的设计模式,它将业务逻辑、用户界面和数据模型分离,...

    MVVM实现WPF中DataGrid动态列与编辑器

    本篇主要讨论如何在MVVM框架下实现DataGrid控件的动态列以及编辑功能。 首先,理解MVVM模式的基本概念: 1. **Model**:模型层,负责业务数据的处理,不关心UI。 2. **View**:视图层,UI界面,用户交互的地方,...

    各种版本的Galasoft.MvvmLight

    - ViewModelBase:这是MVVM模式的核心,提供了INotifyPropertyChanged接口的实现,用于数据绑定和属性变更通知。 - RelayCommand:这是一个命令实现,允许视图与ViewModel之间的交互,支持CanExecute条件检查。 ...

Global site tag (gtag.js) - Google Analytics