数据加载和保存

EdoProject需要一个符合数据结构的JSON数据对象,就可以正常工作。
我们可以加载一个JSON文件,一个XML文件,也可以从服务端数据库加载保存一个项目数据。

加载JSON

首先,服务端有一个data.txt文件,可以打开链接查看。
然后,我们使用Edo.util.Ajax组件,从服务端加载这个地址,获得一个JSON格式的字符串,将JSON字符串反序列化成javascipt对象后,设置给EdoProject:

//加载项目(JSON)
Edo.util.Ajax.request({
    url: 'data/data.txt',
    onSuccess: function(text){                   
        //将json字符串,转换为JSON对象
        var jsObj = Edo.util.JSON.decode(text);
        var data = jsObj.result;
        //创建DataProject
        var dataProject = new Edo.data.DataProject(data);
        //设置调度算法插件
         dataProject.set('plugins', [
            new ProjectSchedule()
        ]);
        //将DataProject设置给EdoProject
        project.set('data', dataProject);
        
        Edo.MessageBox.hide();            
    },
    onFail: function(err){
        alert("导入失败,错误码:"+err);
        Edo.MessageBox.hide();
    }
});

Edo.util.Ajax是一个静态类,调用request方法,传递一个配置对象,就可以与服务端完成一次数据交互操作。这里了解更多Edo.util.Ajax
当然,您也可以使用第三方的Ajax组件,只要确保从服务端正确获得数据就可以了。

加载XML

使用Ajax加载XML数据后,必须将XML转换为JSON,才能正常设置给EdoProject。
可以从微软Project中保存一个XML项目文件,用EdoProject直接打开显示和操作。
这里查看EdoProject数据结构

//加载项目(XML)
Edo.MessageBox.loading('正在加载项目数据,请稍后......');
Edo.util.Ajax.request({
    url: 'data/project.xml',
    onSuccess: function(text){                                                    
        var jsObj = Edo.util.XML.decode(text);
        var data = jsObj.Project;
        
        var dataProject = new Edo.data.DataProject(data);
        dataProject.set('plugins', [
            new ProjectSchedule()                       
        ]);                
        
        project.set('data', dataProject);                               
        
        Edo.MessageBox.hide();            
    },
    onFail: function(err){
        alert("导入失败,错误码:"+err);
        Edo.MessageBox.hide();
    }
});  

加载服务端项目

实际应用中,项目数据是存储在数据库中的。
这个过程跟加载JSON章节差不多,只是url地址是一个服务端的动态网页地址,而不是静态文件。 我们通过Ajax从服务端的一个地址加载项目,这个过程被EdoProject完整封装好了。
您可以使用ProjectService.js里面的loadProject方法来从服务端加载项目。

  • loadProject(projectUID, project):根据项目UID,从服务端数据加载项目数据,是JSON格式。

保存服务端项目

项目数据需要保存在数据库中的,以便下一次加载和修改。
保存DataProject需要有如下两个步骤:

  • 获得DataProject的项目数据
  • 使用Ajax将DataProject的项目数据提交到服务端的一个动态网页地址,服务端获得数据后,保存进数据库。

代码如下:

//获得DataProject的JSON字符串
var json = dataProject.toJson();
//使用Ajax提交保存到服务端数据库
Edo.util.Ajax.request({
    url: ......,
    params: {data: json},
    ......
});

ProjectService.js里面的saveProject方法封装了这个保存过程:

  • saveProject(dataProject):保存一个项目数据到服务端。

开发者只需要传递一个DataProject对象,调用saveProject方法即可。

ProjectService.js

ProjectService.js封装了所有EdoProject的数据加载和保存操作方法,开发者可以直接使用其中的方法,就可以实现加载JSON文件、XML文件、服务端项目,以及保存到服务端等操作:

  • loadJSON(path, project):加载静态JSON文件
  • loadXML(path, project):加载静态XML文件
  • loadProject(projectUID, project):根据项目UID,从服务端数据加载项目数据,是JSON格式。
  • saveProject(dataProject):保存一个项目数据到服务端。
  • deleteProject(projectUID):根据项目UID, 从服务端数据库删除项目。

注意:此文件内的ProjectServiceUrl路径,随应用的项目和文件夹路径变动,而需要调整设置。

开发者可以通过参考ProjectService.js内的代码实现,做一些扩展和自定义。