这是动态生成的一些插件,这是我项目中的一个页面,其中有dojo tree的展示 (function(){ dojo.provide("spolo.navigator.ugelocal"); dojo.require("dijit.form.Button"); dojo.require("dijit.Menu"); dojo.require("dojo.dat
这是动态生成的一些插件,这是我项目中的一个页面,其中有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");
- var usGov = new dojo.store.JsonRest({
- target:"",
- //判断有没有孩子节点
- mayHaveChildren: function(object){
- //等到路径path下的节点集合
- var hasNode=Sling.getContent(object.path,1);
- //遍历节点集合
- for(var child in hasNode){
- var isHave=Sling.getContent(object.path+"/"+child,1);
- var itemnode=isHave.name;
- if(itemnode==object.name){}
- else if(itemnode==undefined){}
- else{
- return true;//为true,则有孩子节点
- }
- }
- return false;
- },
- //得到指定object下孩子节点
- getChildren: function(object, onComplete, onError){
- this.get(object.path+".tidy.1.json").then(function(fullObject){
- var pNode=object;
- //alert(object.children);
- var path=object.path;
- var arrayObj=new Array();//声明一个数组用来放孩子节点集合
- var node1=Sling.getContent(path,1);
- for(var node2 in node1){
- var accessDir=path+"/"+node2;
- var item=Sling.getContent(accessDir,1);
- //得到item的属性
- var itemitemnode=item.name;
- var itemitemFileType=item.fileType;
- var itemitemContent=item.content;
- var type=item.type;
- item.children=new Array();
- if(itemnode==object.name){}
- else if(itemnode==undefined){}
- else{
- //声明一个对象,包含各个指定的属性
- var temp=new Object({
- 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, onError);
- },
- //的每一个tree的节点名字,用的是后台数据的name属性
- getLabel: function(object){
- return object.name;
- },
- //更改一个tree节点
- put: function(object, options){
- // fire the onChildrenChange event
- this.onChildrenChange(object,object.children);
- // this.getChildren(object, onComplete, onError);
- this.onChange(object);
- // execute the default action
- return dojo.store.JsonRest.prototype.put.apply(this, arguments);
- }
- });
- //声明一棵树,场景树用来显示场景的目录结构
- var localSceneTree = new dijit.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);
- //得到传递过来的休息
- var data=msg.message;
- var lo = this._context.get("layout");
- var left = lo.getRegion("left");
- //把得到的休息转化成json对象
- var rawdata = eval('('+data+')')
- //alert(rawdata);
- //声明store
- var store = new dojo.data.ItemFileReadStore({
- data: { identifier: 'id', label : 'name', items: rawdata }
- });
- var treeModel = new dijit.tree.ForestStoreModel({ store: store ,rootId:"laiba",rootLabel:"laiba"});
- //声明一个tree来显示store
- var treeControl = new dijit.Tree({
- model: treeModel,
- showRoot: true,
- onClick:function(item,node,evt){
- //给scene传递休息
- //alert(item.name+item.type);
- var str=item.name+","+item.type;
- if(item.type=='sector'){
- window.document.getElementById('ugeScene').contentWindow.getSectorProperty(str);
- }else if(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指针发生变化
- var temp=this;
- //声明一个button,来测试选中tree中的某一个节点
- var btn=new dijit.form.Button({
- label:"expand",
- onClick:function(){
- //选中tree中的某一个节点
- //定义一个数组
- var buildme = [];
- var result = 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, buildme, item){
- var id = model.getIdentity(item);//得到item的id
- buildme.push(id);//放到数组中
- if(id == lookfor){
- return buildme;//如果id符合条件,返回数组
- }
- for(var idx in item.children){
- //slice()是用来截取数组中的一部分,用它来复制数组,如果省略了end参数,则切分的数组包含从start开始到数组结束的所有元素。
- //现在要用它来复制数组
- var buildmebuildmebranch = buildme.slice(0);
- //递归
- var r = this.recursiveHunt(lookfor, model, buildmebranch, item.children[idx]);
- if(r){ return r; }
- }
- return undefined;
- },
- 以上是一个把一json形式的字符串转化为json对象,让后便利的一种方法,还有定义了一个按钮,可以使tree
- 中的某一个节点被选中及打开他的父节点(expand one node in a dijit.tree)