We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
将Model和View和Controller抽离出来。一般来说就是单页面用用SPA,通过history来push
history.pushState({page: 'A'},'Page a', 'sdfa.html')
一般mvc模式,就是一种开发设计模式,基本思路就是将dom交互内容分为数据模型,视图区,事件控制函数,三部分,并分别对三部分统一管理,Model用来存放请求的数据结果和数据对象,,view用于页面的DOM更新与修改,Controller则用于根据前端路由条件,例如不同hash路由,来调用不同的model来给view渲染不同的数据内容,
<div id="A" onclick="A.event.change"></div> // 可能有一个公用的Component函数 let compoennt = new Component(); let A = component.extend({ $el: document.getelementById("A"); model: { text: "View渲染完成" }, view(data) { let tpl = '<input id="input" type="text" value="{{ text }}" id="showText">{{text}}</span>'; // 调用模板渲染数据获取HTML片段 let html = render(tpl, data); this.$el.innerHTML = html; }, controller(){ // 调用model传入到,view中渲染内容, this.view(self.model); // 用户操作一般通过hash触发Controller改变Model和view $('window').on('hashchange', ()=>{ this.model.text = location.hash; this.view(self.model); }); // 点击事件可以直接触发Model改变并重新渲染View this.event['change'] = () => { this.model.text = '最新的View渲染完成'; this.view(this.model); } } })
当model或者view逻辑复杂之后,可以考虑分文件处理,但是用户操作dom主要通过Controller来控制,但是Controlller只做修改指令的分发,数据渲染主要由view完成。
MVP(Model-View-Presenter)可以跟MVC对照起来看,M就是Model,V就是View,而P则是Presenter,他与Controller类似,但是不同的是,MVP是双向绑定,当用户修改了view的input,输入东西的时候,view通知Presenter来进行Model的修改,区别在于,view和Model不发生个交互,view和Presenter是双向绑定的。view会触发presenter的改变,presenter动作也会改变view,视图区和model不会发生交互。
<div id="A" onclick="A.event.change"></div> // 可能有一个公用的Component函数 let compoennt = new Component(); let A = component.extend({ $el: document.getelementById("A"); model: { text: "View渲染完成" }, view: '<input id="input" type="text" value="{{ text }}" id="showText">{{text}}</span>', presenter(){ // 调用魔漫函数渲染html片段, let html = render(self.view, this.model); this.$el.innerHTML = html; // View 上的改变将通知Presenter改变Model和其他view $('input').on('change', ()=>{ this.model.text = this.value; html = render('{{text}}', this.model); $('#showText').html(html); }); // Controller 上的操作处理和MVC的方式类似 this.event['change'] = () => { this.model.text = '最新的View渲染完成' html = render('{{text}}', this.model); $('#showText').html(html); } } })
上面代码就知道啦,view和model主要提供视图模板和数据而不做任何逻辑处理,这是有好处的,因为这样我们只需要关注Presenter上面的逻辑操作就好了,他的职责清晰,但同时他的代码量剧增。
MVVM则可以认为是一个自动化的MVP框架,并且使用ViewModel替代了Presenter,即数据绑定不需要我们主动去做了,而是由ViewModel去主动完成它,,代码如下,参照vue代码
<div class="home"> <input type="text" v-model="msg" name="" id=""> {{msg}} </div> export default { store, data() { return { msg:"hihih" }; }, methods: { change: function(val) { this.msg = val; } } };
是不是简单好多,vue提供了v-model语法糖来便捷做双向绑定,
比如Angulars通过检查脏数据来进行View层操作更行的,我们不针对某个框架来分析,当某个对象的属性发生变化的时候,通过ViewModel对象的某个属性变化时候,查询变化的相关值,找出它的相关对象,对该元素重新渲染,
谁知道呢,反正我在网址后面加了discord。
MVVM的前端交互大大提高了编程效率,让我们把关注点从view层转移到了Model层,说到虚拟dom,必须得关注的就是按需渲染,只重新渲染你改变的部分,
The text was updated successfully, but these errors were encountered:
plh97
No branches or pull requests
第四章:现代前端交互框架
常见dom API
MVC模式
将Model和View和Controller抽离出来。一般来说就是单页面用用SPA,通过history来push
一般mvc模式,就是一种开发设计模式,基本思路就是将dom交互内容分为数据模型,视图区,事件控制函数,三部分,并分别对三部分统一管理,Model用来存放请求的数据结果和数据对象,,view用于页面的DOM更新与修改,Controller则用于根据前端路由条件,例如不同hash路由,来调用不同的model来给view渲染不同的数据内容,
当model或者view逻辑复杂之后,可以考虑分文件处理,但是用户操作dom主要通过Controller来控制,但是Controlller只做修改指令的分发,数据渲染主要由view完成。
MVP模式
MVP(Model-View-Presenter)可以跟MVC对照起来看,M就是Model,V就是View,而P则是Presenter,他与Controller类似,但是不同的是,MVP是双向绑定,当用户修改了view的input,输入东西的时候,view通知Presenter来进行Model的修改,区别在于,view和Model不发生个交互,view和Presenter是双向绑定的。view会触发presenter的改变,presenter动作也会改变view,视图区和model不会发生交互。
上面代码就知道啦,view和model主要提供视图模板和数据而不做任何逻辑处理,这是有好处的,因为这样我们只需要关注Presenter上面的逻辑操作就好了,他的职责清晰,但同时他的代码量剧增。
前端MVVM模式
MVVM则可以认为是一个自动化的MVP框架,并且使用ViewModel替代了Presenter,即数据绑定不需要我们主动去做了,而是由ViewModel去主动完成它,,代码如下,参照vue代码
是不是简单好多,vue提供了v-model语法糖来便捷做双向绑定,
MVVM数据脏检查机制
比如Angulars通过检查脏数据来进行View层操作更行的,我们不针对某个框架来分析,当某个对象的属性发生变化的时候,通过ViewModel对象的某个属性变化时候,查询变化的相关值,找出它的相关对象,对该元素重新渲染,
前端数据对象劫持(Hijacking)(2种数据代理和数据绑定)
目测我也没懂
谁知道呢,反正我在网址后面加了discord。
关于Vritual DOM交互模式
MVVM的前端交互大大提高了编程效率,让我们把关注点从view层转移到了Model层,说到虚拟dom,必须得关注的就是按需渲染,只重新渲染你改变的部分,
虚拟dom的核心实现需要以下步骤
The text was updated successfully, but these errors were encountered: