classes.js
上传用户:shuoshiled
上传日期:2018-01-28
资源大小:10124k
文件大小:4k
源码类别:

中间件编程

开发平台:

JavaScript

  1. /*!  * Ext JS Library 3.0.0  * Copyright(c) 2006-2009 Ext JS, LLC  * licensing@extjs.com  * http://www.extjs.com/license  */ Ext.BLANK_IMAGE_URL = 'images/s.gif';
  2.     
  3. Task = Ext.data.Record.create([
  4.     {name: 'taskId', type:'string'},
  5.     {name: 'title', type:'string'},
  6.     {name: 'category', type:'string'},
  7.     {name: 'description', type:'string'},
  8.     {name: 'dueDate', type:'date', dateFormat: 'Y-m-d H:i:s'},
  9.     {name: 'completed', type:'boolean'}
  10. ]);
  11. Task.nextId = function(){
  12. // if the time isn't unique enough, the addition 
  13. // of random chars should be
  14. var t = String(new Date().getTime()).substr(4);
  15. var s = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  16. for(var i = 0; i < 4; i++){
  17. t += s.charAt(Math.floor(Math.random()*26));
  18. }
  19. return t;
  20. }
  21. // The main grid's store
  22. TaskStore = function(conn){
  23. TaskStore.superclass.constructor.call(this, {
  24.         sortInfo:{field: 'dueDate', direction: "ASC"},
  25.         groupField:'dueDate',
  26.         taskFilter: 'all',
  27.         reader: new Ext.data.JsonReader({
  28.             idProperty: 'taskId'
  29.         }, Task)
  30.     });
  31.     this.proxy = new Ext.data.SqlDB.Proxy(conn, 'task', 'taskId', this);
  32.     if(window.google){ // google needs the table created
  33.         this.proxy.on('beforeload', this.prepareTable, conn);
  34.     }
  35.     this.addEvents({newcategory: true});
  36. };
  37. Ext.extend(TaskStore, Ext.data.GroupingStore, {
  38.     applyFilter : function(filter){
  39.      if(filter !== undefined){
  40.      this.taskFilter = filter;
  41.      }
  42.         var value = this.taskFilter;
  43.         if(value == 'all'){
  44.             return this.clearFilter();
  45.         }
  46.         return this.filterBy(function(item){
  47.             return item.data.completed === value;
  48.         });
  49.     },
  50.     addTask : function(data){
  51.         this.suspendEvents();
  52.         this.clearFilter();
  53.         this.resumeEvents();
  54.         this.loadData([data], true);
  55.         this.suspendEvents();
  56.         this.applyFilter();
  57.         this.applyGrouping(true);
  58.         this.resumeEvents();
  59.         this.fireEvent('datachanged', this);
  60.         this.fireEvent('newcategory', data.category);
  61.     },
  62.     prepareTable : function(){
  63.         try{
  64.         this.createTable({
  65.             name: 'task',
  66.             key: 'taskId',
  67.             fields: Task.prototype.fields
  68.         });
  69.         }catch(e){console.log(e)}
  70.     }
  71. });
  72. // The store for Categories
  73. CategoryStore = function(){
  74.     CategoryStore.superclass.constructor.call(this, {
  75.         expandData: true,
  76.         data: [],
  77.         fields:[{name: 'text', type:'string'}],
  78.         sortInfo:{field:'text', direction:'ASC'},
  79.         id: 0
  80.     });
  81. }
  82. Ext.extend(CategoryStore, Ext.data.ArrayStore, {
  83.     init : function(store){
  84.         var cats = store.collect('category', false, true);
  85.         this.loadData(cats);
  86.     },
  87.     addCategory : function(cat){
  88.         if(cat && this.indexOfId(cat) === -1){
  89.             this.clearFilter(true);
  90.             this.loadData([cat], true);
  91.             this.applySort();
  92.         }
  93.     }
  94. });
  95. // Grid column plugin that does the complete/active button in the left-most column
  96. CompleteColumn = function(){
  97.     var grid;
  98.     function getRecord(t){
  99.         var index = grid.getView().findRowIndex(t);
  100.         return grid.store.getAt(index);
  101.     }
  102.     function onMouseDown(e, t){
  103.         if(Ext.fly(t).hasClass('task-check')){
  104.             e.stopEvent();
  105.             var record = getRecord(t);
  106.             record.set('completed', !record.data.completed);
  107.             grid.store.applyFilter();
  108.         }
  109.     }
  110.     function onMouseOver(e, t){
  111.         if(Ext.fly(t).hasClass('task-check')){
  112.             Ext.fly(t.parentNode).addClass('task-check-over');
  113.         }
  114.     }
  115.     function onMouseOut(e, t){
  116.         if(Ext.fly(t).hasClass('task-check')){
  117.             Ext.fly(t.parentNode).removeClass('task-check-over');
  118.         }
  119.     }
  120.     Ext.apply(this, {
  121.         width: 22,
  122.         header: '<div class="task-col-hd"></div>',
  123.         menuDisabled:true,
  124.         fixed: true,
  125.         id: 'task-col',
  126.         renderer: function(){
  127.             return '<div class="task-check"></div>';
  128.         },
  129.         init : function(xg){
  130.             grid = xg;
  131.             grid.on('render', function(){
  132.                 var view = grid.getView();
  133.                 view.mainBody.on('mousedown', onMouseDown);
  134.                 view.mainBody.on('mouseover', onMouseOver);
  135.                 view.mainBody.on('mouseout', onMouseOut);
  136.             });
  137.         }
  138.     });
  139. };