原文链接:https://www.f2er.com/dojo/291601.html
这是动态生成的一些插件,这是我项目中的一个页面,其中有dojo tree的展示
- (function(){
- dojo.provide("spolo.navigator.ugelocal");
- dojo.require("dijit.form.Button");
- dojo.require("dijit.Menu");
- dojo.require("dojo.data.ItemFileReadStore");
- dojo.require("dijit.Tree");
- dojo.require("dojo.store.JsonRest");
- dojo.require("dijit.MenuItem");
- dojo.require("dijit.form.Form");
- dojo.require("dijit.Dialog")
- dojo.require("dijit.form.ValidationTextBox");
- dojo.require("dijit.form.Select");
- dojo.require("dijit.layout.BorderContainer");
- dojo.require("dijit.layout.ContentPane");
- dojo.require("dojo.data.ItemFileReadStore");
- varusGov=newdojo.store.JsonRest({
- target:"",
- //判断有没有孩子节点
- mayHaveChildren:function(object){
- //等到路径path下的节点集合
- varhasNode=Sling.getContent(object.path,1);
- //遍历节点集合
- for(varchildinhasNode){
- varisHave=Sling.getContent(object.path+"/"+child,1);
- varitemnode=isHave.name;
- if(itemnode==object.name){}
- elseif(itemnode==undefined){}
- else{
- returntrue;//为true,则有孩子节点
- }
- }
- returnfalse;
- },
- //得到指定object下孩子节点
- getChildren:function(object,onComplete,onError){
- this.get(object.path+".tidy.1.json").then(function(fullObject){
- varpNode=object;
- //alert(object.children);
- varpath=object.path;
- vararrayObj=newArray();//声明一个数组用来放孩子节点集合
- varnode1=Sling.getContent(path,1);
- for(varnode2innode1){
- varaccessDir=path+"/"+node2;
- varitem=Sling.getContent(accessDir,1);
- //得到item的属性
- varitemitemnode=item.name;
- varitemitemFileType=item.fileType;
- varitemitemContent=item.content;
- vartype=item.type;
- item.children=newArray();
- if(itemnode==object.name){}
- elseif(itemnode==undefined){}
- else{
- //声明一个对象,包含各个指定的属性
- vartemp=newObject({
- id:Math.random(),//id属性
- name:itemnode,//name名称
- type:type,
- path:accessDir,//项目路径
- fileType:itemFileType,//项目文件类型
- content:itemContent,//文件包含的内容
- children:item.children,
- parentNode:pNode
- });
- arrayObj.push(temp);//把每个item节点对象放到arrayObj的集合中
- }
- }
- object.children=arrayObj
- onComplete(object.children);
- },onError);
- },
- //得到更节点
- getRoot:function(onItem,onError){
- this.get("/content/ugescene.json").then(onItem,
- //的每一个tree的节点名字,用的是后台数据的name属性
- getLabel:function(object){
- returnobject.name;
- },
- //更改一个tree节点
- put:function(object,options){
- //firetheonChildrenChangeevent
- this.onChildrenChange(object,object.children);
- //this.getChildren(object,onError);
- this.onChange(object);
- //executethedefaultaction
- returndojo.store.JsonRest.prototype.put.apply(this,arguments);
- }
- });
- //声明一棵树,场景树用来显示场景的目录结构
- varlocalSceneTree=newdijit.Tree({
- model:usGov,
- onClick:function(item,node,evt){
- //根据节点的类型来显示不同的toolbar
- if(item.type=="sector"){
- dojo.publish("/toolbar/changed",[{clsid:"spolo.toolbars.sectorToolbar"}]);
- }if(item.type=="mesh"){
- dojo.publish("/toolbar/changed",[{clsid:"spolo.toolbars.meshToolbar"}]);
- }
- window.document.getElementById('ugeScene').contentWindow.getMeshProperty(item.name);
- }
- });
- localSceneTree.startup();
- 以上是遍历一个josnrest的tree,他访问的是个json文件,或者说jcr中的一个节点,
- 他们都可以以josn的形式来访问。
- _getScenen:function(msg){
- //alert("message=============="+msg.message);
- //得到传递过来的休息
- vardata=msg.message;
- varlo=this._context.get("layout");
- varleft=lo.getRegion("left");
- //把得到的休息转化成json对象
- varrawdata=eval('('+data+')')
- //alert(rawdata);
- //声明store
- varstore=newdojo.data.ItemFileReadStore({
- data:{identifier:'id',label:'name',items:rawdata}
- });
- vartreeModel=newdijit.tree.ForestStoreModel({store:store,rootId:"laiba",rootLabel:"laiba"});
- //声明一个tree来显示store
- vartreeControl=newdijit.Tree({
- model:treeModel,
- showRoot:true,evt){
- //给scene传递休息
- //alert(item.name+item.type);
- varstr=item.name+","+item.type;
- if(item.type=='sector'){
- window.document.getElementById('ugeScene').contentWindow.getSectorProperty(str);
- }elseif(item.type=='mesh'){
- window.document.getElementById('ugeScene').contentWindow.getMeshProperty(str);
- }
- //dojo.publish("/toolbar/changed",[{clsid:"spolo.toolbars.sectorToolbar"}]);
- }
- });
- left.setContent("");
- //填充右侧toolbar
- treeControl.placeAt(left.domNode,'first');
- treeControl.startup();
- //把this对象赋给temp对象,这样为了调函数时this指针发生变化
- vartemp=this;
- //声明一个button,来测试选中tree中的某一个节点
- varbtn=newdijit.form.Button({
- label:"expand",
- onClick:function(){
- //选中tree中的某一个节点
- //定义一个数组
- varbuildme=[];
- varresult=temp.recursiveHunt("sectorlist",treeControl.model,buildme,treeControl.model.root);
- if(result&&result.length>0){
- treeControl.set('path',result);
- }
- }
- });
- btn.placeAt(left.domNode,'second');
- btn.startup();
- },
- recursiveHunt:function(lookfor,model,item){
- varid=model.getIdentity(item);//得到item的id
- buildme.push(id);//放到数组中
- if(id==lookfor){
- returnbuildme;//如果id符合条件,返回数组
- }
- for(varidxinitem.children){
- //slice()是用来截取数组中的一部分,用它来复制数组,如果省略了end参数,则切分的数组包含从start开始到数组结束的所有元素。
- //现在要用它来复制数组
- varbuildmebuildmebranch=buildme.slice(0);
- //递归
- varr=this.recursiveHunt(lookfor,buildmebranch,item.children[idx]);
- if(r){returnr;}
- }
- returnundefined;
- },
- 以上是一个把一json形式的字符串转化为json对象,让后便利的一种方法,还有定义了一个按钮,可以使tree
- 中的某一个节点被选中及打开他的父节点(expand one node in a dijit.tree)