美文网首页
MVVM学习记录

MVVM学习记录

作者: 放风筝的小小马 | 来源:发表于2017-08-16 19:48 被阅读9次

使用Object.defineProperty方法,然后通过get和set方法设置对象属性,可以让我们知道对象什么时候被更改了,也就是说,别人对对象的操作,我们都可以知道,记住这句话

image.png

MVVM

M:指Model
V:值View
实现过程:当M变化时通知V,V变化时通知M;

一个简单的代码实现

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
  <style>
  .red{
    color: red;
  }
  </style>
</head>
<body>
  <form>
    <p>姓名<input type="text" name="name">
    <p>年龄<input type="number" name="age">
    <p><input type="submit" value="提交">
  </form>
  <script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
</body>
</html>
var frank = {
  _data: {
    age: 18,
    name: 'frank'
  }
}
Object.defineProperty(frank, 'age', {
  get: function(){
    console.log('frank.age 被读取了')
    return frank._data.age
  },
  set: function(xxx){
    console.log('frank.age 被设置了')
    $('input[name="age"]').val(xxx)
    frank._data.age = xxx
    if(xxx>20){
      $('form').addClass('red')
    }
  }
})

Object.defineProperty(frank, 'name', {
  get: function(){
    console.log('frank.name 被读取了')
    return frank._data.name
  },
  set: function(xxx){
    console.log('frank.name 被设置了')
    $('input[name="name"]').val(xxx)
    frank._data.name = xxx
    

  }
})

$('form').on('input', 'input[name]', function(e){
  let $input = $(e.currentTarget)
  let name = $input.attr('name')
  let value = $input.val()
  frank[name] = value
})

$('input[name="name"]').val(frank.name)
$('input[name="age"]').val(frank.age)

$('form').on('submit', function(e){
  e.preventDefault()
  console.log(frank)
})

setInterval(function(){
  frank.age ++
},1000)

MVVM的缺点

  • 因为M和V会相互影响,只要其中一方更改,必定对另一方有影响,他们是同步的
  • DOM操作内存是很快的,而内存操作DOM,相对而言是比较慢的
  • 我们做一个MVVM框架时要解决两个问题:
    • 第一个:如果用户频繁改动,能不能做到CPU消耗很小;
    • 第二个:如果用户频繁的进行多次改动,那么我们能不能将多次更改合并为一个。
image.png

Vue Tip

image.png

知识点

  • input事件:当用户输入时就会触发,而chang事件,只有鼠标拿开才可以触发
  • dom event是同步的过程,它是立即马上执行的

经验

  • 学习框架,千万不要一开始就去研究它的具体实现,最开始只要会用就行,等熟练使用了它的所有特性之后,就可以考虑去研究它的源代码实现了;如果一开始就研究它的源代码,那就真的是从开始到放弃了

相关文章

  • MVVM学习记录

    这几天突击学了一下arc, 自然navigation, MVVM, lifecycle, DataBinding,...

  • MVVM学习记录

    使用Object.defineProperty方法,然后通过get和set方法设置对象属性,可以让我们知道对象什么...

  • 值得学习的技术文章(持续添加)

    1. MVVM 学习资料 MVVM奇葩说 面向协议的 MVVM 架构介绍 MVVM With ReactiveCo...

  • MVVM 双向绑定的实现

    这篇文章主要记录学习 JS 双向绑定过程中的一些概念与具体的实现 MVVM 具体概念 MVVM 中有一些概念是通用...

  • MVVM终结者(一)

    一个MVVM的学习记录和感悟,我自己也在慢慢学习中,这个DEMO会慢慢完善并且会把学习中需要注意的东西记录下来。感...

  • [AS2.3.3]MVVM模式学习(DataBinding库)

    这边算是对mvvm的学习记录。大部分都来自网上!先说下Data Binding的利弊 优势 DataBinding...

  • 如何构建Android MVVM应用程序

    福利:【免费学习】系统深入学习MVC,MVP,MVVM 1、概述 Databinding 是一种框架,MVVM是一...

  • 前端MVVM模式从理论到实战 (一)

    最近在研究mvvm开发模式,仿照着vue写了一套简单的mvvm代码,也顺便来记录一下 在说mvvm模式之前先简单解...

  • IOS 关于 mvvm个人理解

    记录下自己对于mvvm的理解,由于网上一堆关于mvvm的定义不在赘述,只记录自己在项目使用的理解和使用方式 1:在...

  • MVVM 学习

    UITableViewDelegate和UITableViewDataSource这两个协议中有大量方法每次都是复...

网友评论

      本文标题:MVVM学习记录

      本文链接:https://www.haomeiwen.com/subject/hhtwrxtx.html