标签:javascrip nis mvvm 方法 class 变化 前端 lse 多协议
在IOS的mvvm模式中,model层的变更主要有两种方式,一种是delegate,一种是kvo
delegate就是定义一套协议,然后controller实现这套协议,在数据变更的时候直接通过delegate通知controller层,因为delefate需要实现很多协议,会有一点低耦合,而kvo的解决办法是,在controller层 去监听某个model的某个属性,然后写一个统一的方法去相应属性的变更,这样的好处就是 我不需要去指定实现某种协议,所以的变更控制都在controller层。那这些对于前端mvvm有何借鉴意义呢?
之前在前端model层通知controller层主要还是通过类似代理的方式来实现,这样就是controller层 需要实现指定的协议,举一个例子,
我们有一个user数据层,主要处理和user相关的数据,比如获取数据列表,一般如果用deledate的话,就是在数据请求结束后,调用delegate.dataFinish之类的方法去处理数据,那如果用kvo的实现方式,我们就应该在user层 定义一个userList数组,用来把所有请求过来的数据全部放在userList数组里面,然后controller层 去监听这个userList的变化,如果变化了 就更新界面
具体实现:
//model层
class User{
constructor() {
this.dep = {}
this._userList = [];//这里主要监听userList
}
get userList() {
return this._userList;
}
set userList(data) {
this._userList = data;
if(this.dep.hasOwnProperty("userList")){
let _noticefy = this.dep[_key];
for(let i = 0; i < _noticefy.length; i++){
_noticefy[i](data);
}
}
}
addObserver(options){
let _key = options.key;//监听的属性字段
let _noticefy = options.noticefy;//属性变更后触发的方法
if(this.dep.hasOwnProperty(_key)){
this.dep[_key].push(_noticefy);
}else{
this.dep[_key] = [_noticefy];
}
}
}
//在controller层,我们如果需要使用的话,我们就可以监听
let _user = new User();
_user.addObserver({
key:"userList",
noticefy:function(){}
})
//这样的话 是不是真正的数据驱动了呢?
标签:javascrip nis mvvm 方法 class 变化 前端 lse 多协议
原文地址:https://www.cnblogs.com/mrzhu/p/10451212.html