使用dojo的tree

dojo的Tree很是灵活,但是官方网站上的例子却很少,而且也比较分散,后续将持续完善本例子。

总的来说,要使用tree,要接触到三个类:"dojo/store/JsonRest","dijit/tree/ObjectStoreModel","dijit/Tree"。

通过JsonRest异步从服务端获取数据。

ObjectStoreModel可以设置判断当前数据是否有子结点的方法、数据中哪个属性用来作为label显示在树中,数据使用什么图标显示等。

Tree具体显示树。


			var usGov = new JsonRest({
				target : "/rest/getTreeData",//获取树数据的URL
				getChildren : function(object) {//如何获取下级数据,这里与官方例子里的不一样,官方例子里要求返回的数据信息中要同时返回当前结点数据,大多数情况下这个是多余的,使用下面的程序, 服务端只需要返回下级结点数据的数组即可。
					if (typeof object.children == "undefined") {//这段程序,判断到当本结点的数据的下级数据已经有了后,就不需要再从服务端获取了。
						return this.query({PID:object.ID}).then(function(fullObject) {
							return fullObject;
						});
					} else {
						return object.children;
					}
				}
			});
			// create model to interface Tree to store
			var model = new ObjectStoreModel({
				store : usGov,//				query: {PID: "root"},//通常情况下这个是不需要设置的,如果不设置,从服务端获取根结点数据时将不传参数
				mayHaveChildren : function(object) {//判断数据是否有儿子,当结点展开时是否会调用上面store中的getChildren方法,就是通过这个方法判断的
					return !object.leaf;//本处于官方例子不一样,并不是复用children属性的,程序更为清析。
				},getLabel : function(object) {//数据对象中个属性是用来显示在树结点中的。
					return object.NAME;
				}
			});
			var tree = new Tree({
				model : model,persist : false,showRoot : true,region : 'center',//如果父容器是BorderContainer,指定树显示在该父容器中间
				style : "overflow:hide;padding:0px;"
			});
本树结点第一次从服务端获取根结点的数据例子:
[{NAME: "US Government",
  id: "a1",ID:"1",255)">  leaf:false,255)">  children:[{
           NAME: "Congress2",255)">           id: "a2",255)">           ID:"2",255)">           leaf:false
          },{
           NAME: "Congress3",255)">           id: "a3",255)">           ID:"3",255)">           leaf:true
          }]
}]
 
展开树中Congress2结点时从服务端获取的数据例子:
[{ NAME: "Congress4",
   id: "a4",sans-serif">   ID:"4",sans-serif">   leaf:false,sans-serif">   children:[{
          NAME: "Congress6",id: "a6",ID:"6",leaf:true},sans-serif">         {NAME: "Congress7",id: "a7",ID:"7",leaf:true}]},sans-serif">   {NAME: "Congress5",id: "a5",ID:"5",leaf:true}]

特别要注意,数据中的id属性一定要有,并且不能重复,否则在结点展开的时候可能不会触发从后台获取数据的动作。

相关文章

我有一个网格,可以根据更大的树结构编辑小块数据.为了更容易...
我即将开始开发一款教育性的视频游戏.我已经决定以一种我可以...
我正在使用带有Grails2.3.9的Dojo1.9.DojoNumberTextBox小部...
1.引言鉴于个人需求的转变,本系列将记录自学arcgisapiforja...
我正在阅读使用dojo’sdeclare进行类创建的语法.描述令人困惑...
我的团队由更多的java人员和JavaScript经验丰富组成.我知道这...