美文网首页饥人谷技术博客
DIY一个最简单的MVVM例子

DIY一个最简单的MVVM例子

作者: _茂 | 来源:发表于2019-06-15 11:18 被阅读11次

一、简介

MVVM借鉴了MVC,成为了前端非常流行的软件架构模式。在MVVM中,

  • View职责:简单理解为界面
  • Model职责:简单理解为数据
  • ViewModel职责:
    1.把Model的数据同步到View显示出来,
    2.把View的修改同步回Model

二、例子

这里代码讨论如何做到 把Model的数据同步到View显示出来,如下图:
view部分:一个p元素
mode部分:变量model
viewModel部分:Object.defineProperty以及render函数处理
其他:利用setInterval定时器模拟数据变化(每秒)

<!DOCTYPE html>
<html>
    <div id="container">
        <!-- view 部分 (model.text表示取model.text的数据) -->
        <p id="p" data="{{model.text}}"><p>
    </div>

    <script>
        /** model 部分 **/
        let model = {
            text: '',
        }
        
        // 监听model.text数据变化(重点)
        Object.defineProperty(model, 'text', {
            set: (value) => {
                // model.text变化,新的值是value
                render() // 重新render p 元素 (把Model的数据同步到View显示出来)
            },
            get: () => randomStr
        })

        // 模拟数据变化(每秒)
        let randomStr = ''
        setInterval(() => {
            // 设置一个随机数
            randomStr = Math.floor(Math.random() * 10000) + ''
            model.text = randomStr
        }, 1000)

        // DIY 一个render方法:模拟渲染p元素(根据p元素的属性data的模板语法)
        const render = () => {
            const p = document.querySelector('#container p');
            const expression = /\{\{([^{}]*)\}\}/.exec(p.getAttribute('data'))[1];  // model.text
            // 根据模板变量,修改p的文本
            p.innerText = eval(expression);
        }
    </script>
</html>

另一部分是把View的修改同步回Model,同理,可以在把view部分换成input,监听输入,改变model.text的值即可。(也就是替换上面代码的setInterval部分,原本是每秒变化,改为用户输入即可)。

(完)

相关文章

网友评论

    本文标题:DIY一个最简单的MVVM例子

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