• JS 实现MVC的写法


    案例:当select 下拉选择框值变化时,显示其值(不是文本)

    常规写法

    <h3>JavaScript no MVC</h3>
     <div>
      <select name="" id="setAnimal">
       <option value="cat">cat</option>
       <option value="fish">fish</option>
       <option value="bird">bird</option>
      </select>
      <p id="animalAction"></p>
     </div>
     <script type="text/javascript">
      var animal = document.getElementById('setAnimal');
      console.dir(animal);
      animal.onchange = function() {
       var action = null;
       switch (this.value) {
       case 'cat':
        action = 'cat meows';
        break;
       case 'fish':
        action = 'fish swim';
        break;
       case 'bird':
        action = 'bird fly';
        break;
       default:
        action = 'unknow';
       }
       console.log(action);
       document.getElementById('animalAction').innerHTML = action;
      };
     </script>

    MVC 写法

    <h3>javascript simple MVC</h3>
     <div>
      <select name="" id="setAnimal">
       <option value="cat">cat</option>
       <option value="fish">fish</option>
       <option value="bird">bird</option>
      </select>
     </div>
     <p id="animalDo"></p>
     <script>
      // controller
      Animal = {
       start : function() {
        this.view.start();//从视图触发
       },
       set : function(animalName) {
           this.model.setAnimal(animalName);
           //controller 改变 model 
       }
      };
      // model
      Animal.model = {
       animalDictionary : {
        car : 'meows',
        fish : 'swims',
        bird : 'flies'
       },
       currentAnimal : null,
       setAnimal : function(name) {
        this.currentAnimal = this.animalDictionary[name] ? name : null;
        this.onchange();
       },
       onchange : function() {
           Animal.view.update();
           //model传递结果到View(个人觉得这里可以由Controller来专递,最好不要直接操作视图)
       },
       getAnimalAction : function() {
        return this.currentAnimal ? this.currentAnimal + ' ' + this.animalDictionary[this.currentAnimal] : 'unknow';
       }
      };
      // view
      Animal.view = {
       start : function() {
           document.getElementById('setAnimal').onchange = this.onchange;
           //视图绑定事件
       },
       onchange : function() {
           Animal.set(document.getElementById('setAnimal').value);
           //视图执行操作,调用Controller
       },
       update : function() {
         //视图执行最后的更新响应  
         console.log(Animal.model.getAnimalAction());
         document.getElementById('animalDo').innerHTML = Animal.model.getAnimalAction();
       }
      };
      Animal.start();//入口
     </script>
  • 相关阅读:
    推荐书单
    图解Android
    图解Android
    图解Android
    图解Android
    图解Android
    图解Android
    个人博客平台 http://craft6.cn 上线
    数据库设计教程系列——相关知识点整理
    O2O研究系列——O2O知识思维导图整理
  • 原文地址:https://www.cnblogs.com/chinajava/p/5864531.html
Copyright © 2020-2023  润新知