Javascript Mvc学习杂记3

简介:

接着上次说,这次准备在Model类里面,增加本地存储功能,用的是html5中的localStorage,这样方便,页面刷新的时候,自动加载已经添加的数据,下面是静态页的代码。


<!DOCTYPE HTML>
<html>
 <head>
  <title> New Document </title>
  <meta name="Generator" content="EditPlus">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
  <script src="jquery-1.8.3.js" type="text/javascript"></script>
  <script type="text/javascript" >
     //基于原型的继承
if(typeof Object.create!=="function"){
   Object.create=function(o){
      function F(){}
      F.prototype=o;
      return new F();
   }
}
var Model={
   prototype:{
      init:function(){
        console.log('Model.prototype.init');
      },
      find:function(){
        console.log('Model.prototype.find');
      }
   },
   inherited:function(){
      //console.log('exec inherited')
   },
   created:function(){
      //console.log('exec created!');
   },
   create:function(){
      var object=Object.create(this);
      object.parent=this;
      object.prototype=object.fn=Object.create(this.prototype);

      object.created();//创建完成方法

      this.inherited(object); //继承父类属性方法

      return object;
   },
   init:function(){
      var instance=Object.create(this.prototype);
      instance.parent=this;
      instance.init.apply(instance,arguments);
      return instance;
   },
   extend:function(o){
      for(var key in o){
        this[key]=o[key];
      }
   },
   include:function(o){
      for(var key in o){
         this.prototype[key]=o[key];
      }
   }
};
//类方法
Model.extend({
   records:{},
   initattr:function(o){
      var obj=this.init();
      for(var key in o){
        obj[key]=o[key];
      }
      return obj;
   },
   find:function(id){
      return this.records[id];
   }
});
Model.include({
   save:function(){
      this.parent.records[this.id]=this;
   }
});
var User=Model.create();
//类实例方法
User.include({
   getname:function(){
      console.log(this.name);
   },
   attributes:function(){
      var result={};
      for(var i in this.parent.attributes){
         var attr=this.parent.attributes[i];
         result[attr]=this[attr];
      }
      return result;
   }
});
User.extend({
  attributes:["name","age","id"],
  //保存本地数据
  savelocal:function(){
     var result=[];
     for(var i in this.records){
        var record=this.records[i].attributes();
        result.push(record);
     }
     localStorage.setItem("Users",JSON.stringify(result));
  },
  //加载本地数据
  loadlocal:function(){
     if (localStorage.getItem("Users")){
         alert(localStorage.getItem("Users"));
         var result=JSON.parse(localStorage.getItem("Users"));
         var html=[];
         for(var i in result){
           html.push("<tr>");
           for(var key in this.attributes){
              var attr=this.attributes[key];
              html.push("<td>");
              html.push(result[i][attr]);
              html.push("</td>");
           }
           html.push("</tr>");
         }
         $("#tabinfo tbody").append(html.join(''));
     }
  }
});
$(function(){
    $(window).bind("beforeunload",function(){
       User.savelocal();//页面关闭的时候保存数据
    });
    $("#butadd").click(function(){
       var name=$("#txtname").val();
       var id=$("#txtid").val();
       var age=$("#txtage").val();
       var user=User.initattr({"name":name,"age":age,"id":id});
       user.save();
       var html=[];
       html.push("<tr>");
       for(var key in User.attributes){
              var attr=User.attributes[key];
              html.push("<td>");
              html.push(user[attr]);
              html.push("</td>");
       }
      html.push("</tr>");
      console.log(user);
      $("#tabinfo tbody").append(html.join(''));
    });
    //初始化的时候从本地数据里加载内容
    User.loadlocal();
});
  </script>
 </head>

 <body>
    <p>
      编号:<input type="textbox" id="txtid" style="margin:5px;padding:5px;width:200px;" />
      姓名:<input type="textbox" id="txtname" style="margin:5px;padding:5px;width:200px;" />
      年龄:<input type="textbox" id="txtage" style="margin:5px;padding:5px;width:200px;" />
      <input type="button" id="butadd" style="margin:5px;padding:5px;width:200px;" value="添加" />
    </p>
    <p>
      <table style="border:1px solid green" id="tabinfo">
         <thead>
            <th>编号</th>
            <th>姓名</th>
            <th>年龄</th>
         </thead>
         <tbody>

         </tbody>
      </table>
    </p>
 </body>
</html>

将上面的文件保存为index.html,然后可以在支持html5的浏览器里运行,比如chrome,ff等。还有一个jquery1.8.3的js库,此处可以换成jquery的CDN,这是官方提供的CDN地址http://code.jquery.com/jquery-1.8.3.min.js

好了,今天就写到这了,下次continue :)


目录
相关文章
|
1月前
|
JavaScript 前端开发 开发者
VUE 开发——Node.js学习(一)
VUE 开发——Node.js学习(一)
54 3
|
2月前
|
JavaScript
ES6学习(9)js中的new实现
ES6学习(9)js中的new实现
|
29天前
|
JavaScript
js学习--制作猜数字
js学习--制作猜数字
36 4
js学习--制作猜数字
|
28天前
|
JavaScript
webpack学习五:webpack的配置文件webpack.config.js分离,分离成开发环境配置文件和生产环境配置文件
这篇文章介绍了如何将webpack的配置文件分离成开发环境和生产环境的配置文件,以提高打包效率。
42 1
webpack学习五:webpack的配置文件webpack.config.js分离,分离成开发环境配置文件和生产环境配置文件
|
2月前
|
算法 JavaScript 前端开发
第一个算法项目 | JS实现并查集迷宫算法Demo学习
本文是关于使用JavaScript实现并查集迷宫算法的中国象棋demo的学习记录,包括项目运行方法、知识点梳理、代码赏析以及相关CSS样式表文件的介绍。
第一个算法项目 | JS实现并查集迷宫算法Demo学习
|
2月前
|
JavaScript 前端开发 API
紧跟月影大佬的步伐,一起来学习如何写好JS(上)
该文章跟随月影老师的指导,探讨了编写优质JavaScript代码的三大原则:各司其职、组件封装与过程抽象,通过具体示例讲解了如何在实际开发中应用这些原则以提高代码质量和可维护性。
紧跟月影大佬的步伐,一起来学习如何写好JS(上)
|
29天前
|
JavaScript
js学习--制作选项卡
js学习--制作选项卡
36 4
|
28天前
|
JavaScript
js学习--商品列表商品详情
js学习--商品列表商品详情
16 2
|
28天前
|
JavaScript
js学习--九宫格抽奖
js学习--九宫格抽奖
15 2
|
28天前
|
JavaScript
js学习--开屏弹窗
js学习--开屏弹窗
32 1