/** * Created by Mai on 2017/4/1. */ var PROJECT = { <<<<<<< HEAD createNew: function () { // ����private���� var tools = {}; // ����ͨ��this���ʵ����ԣ�����Ӧ�ڴ˵�Ԫ�ⲿ����д����� ======= createNew: function (projectID, userID) { // 定义private方法 var tools = { _ID: projectID, _userID: userID, updateLock: 0, updateData: [], operation: '', modules: {}, doAfterUpdate: function(result){ result.forEach(function(item){ if (item.moduleName in this.modules){ this.modules[item.moduleName].doAfterUpdate(item.err, item.data); } }); } }; // 所有通过this访问的属性,都不应在此单元外部进行写入操作 >>>>>>> bc0f5d2858a5b09273a8d6ed5620a4deb05293b2 var project = function () { this.mainTree = cacheTree.createInit(this); <<<<<<< HEAD this.Bills = Bills.createInit(this); this.Rations = Rations.createInit(this); this.GLJs = GLJs.createInit(this); ======= this.Bills = Bills.createNew(this); this.Ration = Ration.createNew(this); this.GLJ = GLJ.createNew(this); >>>>>>> bc0f5d2858a5b09273a8d6ed5620a4deb05293b2 this.masterField = {ration: 'BillsID'}; }; <<<<<<< HEAD // prototype���ڶ���public���� ======= // prototype用于定义public方法 >>>>>>> bc0f5d2858a5b09273a8d6ed5620a4deb05293b2 project.prototype.modify = function (modifyDatas, callback) { // To Do }; // prototype用于定义public方法 project.prototype.ID = function () { return tools._ID; }; project.prototype.loadMainTree = function () { var that = this; var loadRationNode = function (rations, cacheNode) { var newNode; rations.forEach(function (ration) { if (ration[that.masterField.ration] && ration[that.masterField.ration] === cacheNode.source.getID()) { newNode = that.mainTree.addNode(cacheNode); newNode.source = ration; newNode.sourceType = that.Ration.getSourceType(); newNode.data = ration; } }); }; var loadIdTreeNode = function (nodes, parent) { var newNode, i; for (i = 0; i < nodes.length; i++) { newNode = that.mainTree.addNode(parent); newNode.source = nodes[i]; newNode.sourceType = that.Bills.getSourceType(); newNode.data = nodes[i].data; if (nodes[i].children.length === 0) { loadRationNode(that.Ration.datas, newNode); } else { loadIdTreeNode(nodes[i].children, newNode); } } }; loadIdTreeNode(this.Bills.tree.roots, null); this.mainTree.sortTreeItems(); }; // 提供给各模块调用的统一从后台获取数据的方法 project.prototype.pullData = function (url, data, successCallback, errorCallback) { $.ajax({ type:"POST", url: url, data: {'data': JSON.stringify(data)}, dataType: 'json', cache: false, timeout: 50000, success: function(result){ successCallback(result); }, error: function(jqXHR, textStatus, errorThrown){ alert('error ' + textStatus + " " + errorThrown); errorCallback(); } }); }; // 所有模块在此从后台获取数据 project.prototype.loadDatas = function (){ this.Bills.pullData(); this.Ration.pullData(); this.GLJ.pullData(); }; project.prototype.beginUpdate = function(operation){ if (tools.updateLock === 0){ tools.operation = operation } tools.updateLock += 1; }; project.prototype.endUpdate = function(){ if (tools.updateLock === 0){ throw "project can not endUpdate before beginUpdate"; } tools.updateLock -= 1; if (tools.updateLock === 0) { $.ajax({ type: "POST", url: '/project/save', data: {'data': JSON.stringify({ "project_id": tools._ID, "user_id": tools._userID, "date": new Date, "operation": tools.operation, "update_data": tools.updateData })}, dataType: 'json', cache: false, timeout: 50000, success: function (result) { if (result.error === 0) { tools.doAfterUpdate(result.data); } else { alert('error: ' + result.message); } }, error: function(jqXHR, textStatus, errorThrown){ alert('error ' + textStatus + " " + errorThrown); } }); tools.updateData = []; tools.operation = ""; } }; project.prototype.push = function(moduleName, data){ if (tools.updateLock === 0){ throw "project can not push data before beginUpdate"; }; var moduleData = { moduleName: moduleName, data: data }; tools.updateData.push(moduleData); }; project.prototype.registerModule = function(moduleName, obj){ if (!tools.modules.hasOwnProperty(moduleName)){ tools.modules[moduleName] = obj; } }; return new project(); } };