tx.data.ListStore = Ext.extend(Ext.data.Store, { constructor: function(){ tx.data.ListStore.superclass.constructor.call(this, { sortInfo:{field: 'listName', direction: "ASC"}, reader: new Ext.data.JsonReader({ id: 'listId', fields: tx.data.List }) }); this.boundTrees = {}; this.conn = tx.data.conn; this.proxy = new Ext.sql.Proxy(tx.data.conn, 'list', 'listId', this); }, getName : function(id){ var l = this.data.map[id]; return l ? l.data.listName : ''; }, addList : function(name, id, isFolder, parentId){ var l = this.findList(name); if(!l){ var id = id || Ext.uniqueId(); l = new tx.data.List({listId: id, listName: name, isFolder: isFolder === true, parentId: parentId || 'root'}, id); this.add(l); } return l; }, newList : function(isFolder, parentId){ var i = 1; var text = isFolder ? 'New Folder ' : 'New List '; while(this.findList(text + i)){ i++; } return this.addList(text + i, undefined, isFolder, parentId); }, findList : function(name){ var d = this.data; for(var i = 0, len = d.length; i < len; i++){ if(d.items[i].data.listName === name){ return d.items[i]; } } return null; }, loadDemoLists: function(){ this.addList('Personal', 'personal', true, 'root'); this.addList('Family', 'family', false, 'personal'); this.addList('Bills', 'bills', false, 'personal'); this.addList('Fun', 'fun', false, 'personal'); this.addList('Other Stuff', 'personal-misc', false, 'personal'); this.addList('Work', 'work', true, 'root'); this.addList('Ext 2.x', 'ext2', false, 'work'); this.addList('Ext 1.x', 'ext1', false, 'work'); this.addList('Meetings', 'meetings', false, 'work'); this.addList('Miscellaneous', 'work-misc', false, 'work'); }, bindTree : function(tree){ this.boundTrees[tree.id] = { add: function(ls, records){ var pnode = tree.getNodeById(records[0].data.parentId); if(pnode){ pnode.reload(); } }, remove: function(ls, record){ var node = tree.getNodeById(record.id); if(node && node.parentNode){ node.parentNode.removeChild(node); } }, update: function(ls, record){ var node = tree.getNodeById(record.id); if(node){ node.setText(record.data.listName); } } }; this.on(this.boundTrees[tree.id]); }, unbindTree : function(tree){ var h = this.boundTrees[tree.id]; if (h) { this.un('add', h.add); this.un('remove', h.remove); this.un('update', h.update); } }, prepareTable : function(){ try{ this.createTable({ name: 'list', key: 'listId', fields: tx.data.List.prototype.fields }); }catch(e){console.log(e);} } });