avalon有关ViewModel与Model的同步问题

本文详细介绍了Avalon框架中的三个核心元素M(Model)、V(View)和VM(ViewModel)之间的关系及作用机制。阐述了M作为普通JS对象如何与VM中的$json属性同步,并通过实例展示了V如何与VM互动,实现数据双向绑定。

经过几天的讨论,基本上确定了avalon的几个重要元素的关系。

M,即model,一个普通的JS对象,可能是后台传过来的,也可能是直接从VM中拿到,即VM.$json。有关的这个$json的名字还在商讨,详见这里

V,即View,HTML页面,通过绑定属性或插值表达式,呈现数据,处理隐藏,绑定事件或动画等各种交互效果。V只与VM打交道。

VM,即ViewModel,我们通过avalon.define("xxx", function(vm){vm.firstName = "正美"}),这里的vm是一个临时的对象,用于定义,真正的VM是avalon.define方法的返回值。它上面的$json属性就是M,可以见VM处于一切的核心。我们对VM的每一个操作,都会向上同步到V,向下同步到M。并且出于节能低碳起见(减少对象的创建),我们在生成M时,会重复利用VM中的一些属性,比如vm的某个属性是一个对象,那么这个对象会直接搬到$json中。若它是一个数组,它里面每个元素为对象,这些数组或对象都会直接$json中去,当然有时会修复一下(比如计算属性会转换一个简单的数据类型)

下面是一个够为直观的例子:

            var b = {name: "xxx", eee: "ooo"}
            var array = [{name: "xxx"}, {title: "yyy"}]
            var a = avalon.define("xxx", function(vm) {
                vm.firstName = "司徒";
                vm.lastName = "正美";
                vm.nick = b;
                vm.array = array;
            });
            console.log(a.nick.$json === b);//true
            console.log(a.array.$json == array);//true
            console.log(a.array.$json[0] === array[0]);//true
            console.log(a.array[0].$json === array[0]);//true
            console.log(JSON.stringify(a.$json));//{"firstName":"司徒","lastName":"正美","nick":{"name":"xxx","eee":"ooo"},"array":[{"name":"xxx"},{"title":"yyy"}]}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值