zoukankan      html  css  js  c++  java
  • MVC中简单数据模型(M): Model类

    读书笔记:

    基于mvc的javascript web富媒体应用开发,
    模型和数据
    Model类
     
    //新建类的函数Object.create,ECMAScript5已经实现
    if(typeof Object.create !== 'function'){
     Object.create = function(o){
      function F(){};
      F.prototype = o;
      return new F();
     };
    }
    
    //模型
    var Model = {
     inherited: function(){},
     created: function(){},
     prototype:{//用于模型实例继承用
      init: function(a){
       console.log(22);
       this.name = 'Model.name'
      }
     },
     //创建模型
     create: function(){
      var o = Object.create(this);
      o.parent = this;
      o.prototype = o.fn = Object.create(this.prototype);//Model.prototype.init
      o.created();
      this.inherited();
      return o;
     },
     //创建模型实例
     init: function(){
      //console.log(this);
      //console.log(this.prototype);//Model.prototype.init
      var instance = Object.create(this.prototype);
      instance.parent = this;
      instance.init.apply(instance, arguments);
      return instance;
     },
     //扩展模型方法
     extend: function(o){
      var extended = o.extended;
      jQuery.extend(this, o);
      if(extended) extended(this);
     },
     //扩展模型实例方法
     include: function(o){
      var included = o.included;
      jQuery.extend(this.prototype, o);
      if(included) includeed(this);
     }
    };
    
    //扩展模型find方法
    Model.extend({
     find: function(){}
    });
    //扩展模型实例init方法,会覆盖Model.prototype.init方法
    
    //并扩展load方法
    Model.include({
     init: function(attr){
      if(attr) this.load(attr);
     },
     load: function(attributes){
      for(var name in attributes){
       this[name] = attributes[name];
      }
     }
    });
    //扩展模型属性
    Model.records = {};
    //扩展模型实例: create,destroy方法及newRecord属性
    Model.include({
     newRecord: true,
     create: function(){
      this.newRecord = false;
      this.parent.records[this.id] = this;
     },
     destroy: function(){
      delete this.parent.records[this.id];
     }
    });
    //扩展模型实例: update方法
    Model.include({
     update: function(){
      this.parent.records[this.id] = this;
     }
    });
    //扩展模型实例: save方法用以实现兼容更新与创建
    Model.include({
     save: function(){
      this.newRecord ? this.create() : this.update();
     }
    });
    //扩展模型方法用于查找记录
    Model.extend({
     find: function(id){
      return this.records[id] || 'Unkonw record';
     }
    });

    使用数据模型创建,保存,查找

    var Asset = Model.create();//创建模模型
    var asset = Asset.init();//创建数据模型实例1
    asset.name = "same, same";
    asset.id = 1;
    asset.save();
    var asset2 = Asset.init();//创建数据模型实例2
    
    asset2.name = "but different";
    asset2.id = 2;
    asset2.save();
    asset2.destroy();
    console.log(Asset.find(2));
  • 相关阅读:
    《python编程从入门到实践》变量和简单数据类型
    《初学python》
    centos7 关闭防火墙
    记几个学习资源
    servlet-api.jar
    spring 对Map的一种扩展 MultiValueMap
    CPU飚高问题解决
    聊聊数据库优化
    netty的核心组件
    【转】 一个著名的日志系统是怎么设计出来的?
  • 原文地址:https://www.cnblogs.com/willian/p/2880465.html
Copyright © 2011-2022 走看看