ExtJS甘特图控件继承至Extjs的GridPanel,若是你熟悉Extjs,那么使用Extjs甘特图就很是的轻松;若是没有,你须要花一点时间来先学习一下Extjs。ExtJS甘特图控件按照MVC(模型、视图、和控制器)的设计框架设计。 html
1. 模型层: 甘特图的数据模型包括两个方面,任务模型和依赖模型(任务之间的关联关系)。相对应的类有Ext.ux.maximgb.tg.AdjacencyListStore和Ext.data.Store,而前者继承于后者。框架
2. 界面显示组件:咱们主要使用这个GanttPanel类,只须要定义一些属性就能够了。学习
3. 控制器: 这个是由Extjs甘特图内部控制的,咱们只须要在适当的时候,相应一些事件就能够定制咱们本身的功能。url
1. 左边是树形表格组件, 继承至Extjs的Datagrid。因此Datagrid的操做也能够运用于GanttPanel,就连API也是同样的。设计
如上图所示,左侧的是树形表格,右侧是条形图,他们组合起来就是一个标准的甘特图。orm
咱们先帖出一个最简单的,显示一个甘特图例子的完整代码。xml
1. //定义任务节点的数据模型 htm
2. var taskStore = new Ext.ux.maximgb.tg.AdjacencyListStore({ 继承
3. proxy: new Ext.data.HttpProxy({ 事件
4. //tasks.xml中包含有咱们任务数据
5. url: 'tasks.xml',
6. method: 'GET'
7. }),
8. reader: new Ext.data.XmlReader({
9.
10. record: 'Task',
11. idPath: "Id",
12. fields: [
13. //如下字段为必须的
14. {name: 'Id' },
15. { name: 'Name', type: 'string' },//任务名称
16. { name: 'StartDate', type: 'date', dateFormat: 'c' },//开始时间
17. { name: 'EndDate', type: 'date', dateFormat: 'c' },//结束时间
18. { name: 'PercentDone' },//完成的百分比
19. { name: 'ParentId', type: 'auto' },//父任务
20. { name: 'IsLeaf', type: 'bool' },//是不是叶节点
21.
22. //你能够增长其余字段。
23. {name: 'Responsible' }
24. ]
25. })
26. });
27. //定义依赖的数据模型
28. var dependencyStore = new Ext.data.Store({
29. autoLoad: true,
30. proxy: new Ext.data.HttpProxy({
31. url: 'dependencies.xml',
32. method: 'GET'
33. }),
34. reader: new Ext.data.XmlReader({
35. // records will have a 'Task' tag
36. record: 'Link',
37. fields: [
38. // 如下字段为必须的
39. {name: 'From' },//被依赖节点
40. { name: 'To' },//依赖节点
41. { name: 'Type', type: 'int' }//依赖类型,SS,SF,FS,FF
42. ]
43. })
44. });
45.
46. //定义甘特图
47. var g = new Sch.gantt.GanttPanel({
48. columns : [
49. {
50. header : 'Tasks',
51. sortable:true,
52. dataIndex : 'Name',
53. locked : true,
54. width:250,
55. editor : new Ext.form.TextField()
56. }
57. ],
58.
59. taskStore : taskStore,
60. dependencyStore: dependencyStore
});