DOJO grid一个小例子

这周的工作是研究dojo grid 的树状gird。但是大部分时间用来改各种各样的bug了,一共没有两天来调查这个东西,从网上找了一些例子,分享一下。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
	"http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
        <title>dojox.grid.TreeGrid Lazy-loading for children items test</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
        <style type="text/css">
            @import "web/dojo/dojo/resources/dojo.css";
            @import "web/dojo/dijit/themes/claro/claro.css";
            @import "web/dojo/dojox/grid/resources/Grid.css";
			@import "web/dojo/dojox/grid/resources/tundraGrid.css";
            @import "web/dojo/dojox/grid/resources/claroGrid.css";
            body {
				font-size: 0.9em;
				font-family: Geneva,Arial,Helvetica,sans-serif;
				padding: 0.5em;
			}
			.title {
				text-align:center;
				margin:1em;
			}
			#grid1 {
                width: 65em;
                height: 25em;
				border: 1px solid #333333;
            }
			#grid2 {
                width: 65em;
                height: 25em;
				border: 1px solid #333333;
            }
        </style>
        <script type="text/javascript" src="web/dojo/dojo/dojo.js"  djConfig="isDebug:true,parseOnLoad: true"></script>
        <script type="text/javascript">
            dojo.require("dojox.grid.LazyTreeGrid");
			dojo.require("dojo.data.ItemFileWriteStore");
            dojo.require("dijit.tree.ForestStoreModel");
			dojo.require("dojox.grid.LazyTreeGridStoreModel");
			dojo.require("dijit.form.Button");
			
			// large dataset
			var rows = 5;
			
			//1 -------------->定义一个json字符串continentItems.用来描述大陆
			var continentItems = [
				{name:'South America',type:'continent',population:'',area:''},{name:'North America',{name:'Asia',{name:'Oceania',{name:'Europe',area:''}
			];
			//1 end
			
			//2 -------------定义一个数组continentChildrenList,用来存放5项大陆名称
			var continentChildrenList = [];
			for(var i=0,l=continentItems.length; i<rows; i++){
				continentChildrenList.push(dojo.mixin({ id: 'continent_' + i },continentItems[i%l]));
			}
			//2 end
			
			//3 -------------定义一个json字符串countryItems,用来描述国家名称。
			rows = 100;
			var countryItems = [
				{name:'Egypt',type:'country',{name: 'Kenya',type: 'country',{name:'Sudan',{name:'China',{name:'India',{name:'Russia',{name:'Mongolia',area:'' },{name:'Australia',population:'21 million',{name:'Germany',{name:'France',{name:'Spain',{name:'Italy',{name:'Mexico',population:'108 million',area:'1,972,550 sq km'},{name:'Canada',population:'33 million',area:'9,984,670 sq km'},{name:'United States of America',{name:'Brazil',population:'186 million',{name:'Argentina',population:'40 million',area:'' }
			];
			//3 end
			
			//4 -------------定义一个数组countryChildrenList,用来存放国家名称
			var countryChildrenList = [];
			for(var i=0,l=countryItems.length; i<rows; i++){
				countryChildrenList.push(dojo.mixin({ id: 'country_' + i },countryItems[i%l]));
			}
			//4 end
			
			//5 -------------定义一个json字符串cityItems,用来描述城市名称。
			cityItems = [
				{name:'Nairobi',type:'city',{name:'Mombasa',{name:'Khartoum',{name:'Mexico City',population:'19 million',area:'',timezone:'-6 UTC'},{name:'Guadalajara',population:'4 million',timezone:'-6 UTC' },{name:'Ottawa',population:'0.9 million',timezone:'-5 UTC'},{name:'Toronto',population:'2.5 million',timezone:'-5 UTC' },];
			//5 end
			
			//6 -------------定义一个数组cityChildrenList,用来存放城市名称
			var cityChildrenList = [];
			for(var i=0,l=cityItems.length; i<rows; i++){
				cityChildrenList.push(dojo.mixin({ id: 'city_' + i },cityItems[i%l]));
			}
			//6 end
			
			
			//1,continentChildrenList: 大洲
			//2,countryChildrenList: 国家
			//3,cityChildrenList: 城市
			var dataItems = {
				identifier: 'id',label: 'name',items: [
					{id:'Continent',name:'Continent',type:'',population: '',area: '',children: continentChildrenList},{id:"Country",name:"Country",type:"",children: countryChildrenList},{id:"City",name:"City",children: cityChildrenList}
				]
			};
			
			var readStore = new dojo.data.ItemFileReadStore({data: dataItems});
			//注意countryStore的json数据
			var writeStore = new dojo.data.ItemFileWriteStore({url: "support/countryStore.json?"});
			var model1 = new dijit.tree.ForestStoreModel({store: readStore,childrenAttrs: ['children']})
			var model2 = new dojox.grid.LazyTreeGridStoreModel({store: writeStore,childrenAttrs: ['children']});
			
			var layout = [
				{name: 'Name',field: 'name',width: 'auto'},{name: 'Type',field: 'type',{name: 'Population',field: 'population',{name: 'Area',field: 'area',width: 'auto'}
			]
			
			function refresh(flg){
				grid2.refresh(flg);
			}
			var idx = 0;
			
			//增加一项
			function addItem(){
				var item = {id:'test_' + idx,name:'test_' + (idx++),area: ''};
				grid2.store.newItem(item);
			}
			//增一个子节点
			function addChildItem(){
				var parentItem = grid2.selection.getSelected()[0];
				if(parentItem){
					var item = {id:'test_child_' + idx,name:'test_child_' + (idx++),area: ''};
					grid2.store.newItem(item,{parent: parentItem,attribute: "children"});
				}
			}
			//移除掉一个子节点。 
			function removeSelected(){
				grid2.removeSelectedRows();
			}
			//展开所有节点
			function expandSelected(){
				var item = grid2.selection.getSelected()[0];
				if(item){
					grid2.expand(grid2.store.getIdentity(item));
				}
			}
			//收缩所有节点。 
			function collapseSelected(){
				var item = grid2.selection.getSelected()[0];
				if(item){
					grid2.collapse(grid2.store.getIdentity(item));
				}
			}
			
			
			dojo.addOnLoad( 
				function()
				{
					alert("wawawa1");
				}
			);
			
		</script>
    </head>
    <body class="claro">
        <h1 class="title">Test: dojox.grid.TreeGrid - Lazy-loading for children items</h1>
		<h2>grid 1</h2>
		<div id='grid1' jsid='grid1' dojoType='dojox.grid.LazyTreeGrid' summary="A customized tree grid summary"
				structure='layout' treeModel='model1' rowSelector='true'></div>
				
		<h2>grid 2</h2>
		<div id='grid2' jsid='grid2' dojoType='dojox.grid.LazyTreeGrid'
				structure='layout' treeModel='model2' 
				keepSelection='true' rowSelector='true'></div>
		
		<button dojoType="dijit.form.Button" onClick="refresh(true)">Refresh with state</button>
		<button dojoType="dijit.form.Button" onClick="refresh(false)">Refresh without state</button>
		<button dojoType="dijit.form.Button" onClick="addItem()">Add Item</button>
		<button dojoType="dijit.form.Button" onClick="addChildItem()">Add Child Item</button>
		<button dojoType="dijit.form.Button" onClick="removeSelected()">Delete Selected</button>
		<button dojoType="dijit.form.Button" onClick="expandSelected()">Expand Selected</button>
		<button dojoType="dijit.form.Button" onClick="collapseSelected()">Collapse Selected</button>
    </body>
</html>
countryStore.json数据:
 
 
{ identifier: 'name',items: [ { name:'Africa',children:[ { name:'Egypt',type:'country' },{ name:'Kenya',children:[ { name:'Nairobi',adults: 70400,popnum: 2940911 },{ name:'Mombasa',adults: 294091,popnum: 707400 } ] },{ name:'Sudan',children: { name:'Khartoum',adults: 480293,popnum: 1200394 } } ] },{ name:'Asia',children:[ { name:'China',{ name:'India',{ name:'Russia',{ name:'Mongolia',type:'country' } ] },{ name:'Australia',children: { name:'Commonwealth of Australia',population:'21 million'} },{ name:'Europe',children:[ { name:'Germany',{ name:'France',{ name:'Spain',{ name:'Italy',{ name:'North America',children:[ { name:'Mexico',550 sq km',children:[ { name:'Mexico City',adults: 120394,popnum: 19394839,{ name:'Guadalajara',adults: 1934839,popnum: 4830293,timezone:'-6 UTC' } ] },{ name:'Canada',670 sq km',children:[ { name:'Ottawa',adults: 230493,popnum: 9382019,{ name:'Toronto',adults: 932019,popnum: 2530493,timezone:'-5 UTC' }] },{ name:'United States of America',{ name:'South America',children:[ { name:'Brazil',population:'186 million' },{ name:'Argentina',population:'40 million' } ] } ] }

上面的例子是dojo grid的延迟加载,是读取json文件。我做的例子从后台传回数据与json文件的数据格式一样了,但是还没有绑定到grid中,还需要在查找一些资料

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


我有一个网格,可以根据更大的树结构编辑小块数据.为了更容易知道用户保存了什么,我希望当用户第一次看到网格时,网格处于不可编辑状态.当用户准备好后,他们可以单击编辑按钮,这将使网格的某些部分可编辑.然后,有一个保存或取消按钮可以保存更改或还原.在大多数情况下它是有效的.但
我即将开始开发一款教育性的视频游戏.我已经决定以一种我可以轻松打包为Web,Mobiles和可能的Standalone版本的方式来实现这一目标.我不想使用Flash.因此,我确信(无论如何我会听取建议)使用JavaScript和SVG.我正在对这个问题进行大量研究,但我很难把各个部分放在一起.我知道Raphae
我正在使用带有Grails2.3.9的Dojo1.9.DojoNumberTextBox小部件–我在表单中使用–将固定格式(JavaScript基本格式)的实数值(例如:12.56)设置为HTML表单输入字段(但根据浏览器区域设置显示/编辑它们,所以用户总是看到格式正确的数字).另一方面,Grails期望输入字段根据浏览器
1.引言鉴于个人需求的转变,本系列将记录自学arcgisapiforjavaScript的学习历程,本篇将从最开始的arcgisapiforjavaScript部署开始,个人声明:博文不在传道受业解惑,旨在方便日后复习查阅。由于是自学,文章中可能会出现一些纰漏,请留言指出,不必留有情面哦!2.下载ArcGISforDe
我正在阅读使用dojo’sdeclare进行类创建的语法.描述令人困惑:Thedeclarefunctionisdefinedinthedojo/_base/declaremodule.declareacceptsthreearguments:className,superClass,andproperties.ClassNameTheclassNameargumentrepresentsthenameofthec
我的团队由更多的java人员和JavaScript经验丰富组成.我知道这个问题曾多次被问到,但为了弄清楚我的事实,我需要澄清一些事情,因为我在客户端技术方面的经验非常有限.我们决定使用GWT而不是纯JavaScript框架构建我们的解决方案(假设有更多的Java经验).这些是支持我的决定的事实.>
路由dojo/framework/srcouting/README.mdcommitb682b06ace25eea86d190e56dd81042565b35ed1Dojo应用程序的路由路由FeaturesRoute配置路径参数RouterHistoryManagersHashHistoryStateHistoryMemoryHistoryOutletEventRouterContextInjectionOutl
请原谅我的无知,因为我对jquery并不熟悉.是否有dojo.connect()的等价物?我找到了这个解决方案:http:/hink-robot.com/2009/06/hitch-object-oriented-event-handlers-with-jquery/但是没有断开功能!你知道jquery的其他解决方案吗?有jquery.connect但这个插件在我的测试中不起作用.
与java类一样,在dojo里也可以定义constructor 构造函数,在创建一个实例时可以对需要的属性进行初始化。//定义一个类mqsy_yjvar mqsy_yj=declare(null,{     //thedefaultusername    username: "yanjun",          //theconstructor   
我一直在寻找一些最佳实践,并想知道Dojo是否具有框架特定的最佳实践,还是最好只使用通用的Javascript标准?特别是我主要是寻找一些功能和类评论的指导方针?解决方法:对于初学者来说,这是项目的风格指南:DojoStyleGuide
我有’05/17/2010’的价值我想通过使用dojo.date.locale将其作为“2010年5月17日”.我尝试过使用dojo.date.locale.parse,如下所示:x='05/17/2010'varx=dojo.date.locale.parse(x,{datePattern:"MM/dd/yyyy",selector:"date"});alert(x)这并没有给我所需的日期
我正在尝试创建一个包含函数的dojo类,这些函数又调用此类中的其他函数,如下所示:dojo.provide("my.drawing");dojo.declare("my.drawing",null,{constructor:function(/*Object*/args){dojo.safeMixin(this,args);this.container=args[0];
我知道你可以使用jQuery.noConflict为jQuery做这件事.有没有办法与Dojo做类似的事情?解决方法:我相信你可以.有关在页面上运行多个版本的Dojo,请参阅thispage.它很繁琐,但似乎是你正在寻找的东西.一般来说,Dojo和jQuery都非常小心,不会破坏彼此或其他任何人的变量名.
我有一个EnhancedGrid,用户经常使用复杂的过滤器.有没有办法允许用户保存或标记过滤器,以便将来可以轻松地重新应用它?我知道我可以通过编程方式设置过滤器,但我无法预测用户想要的过滤器.谢谢!编辑:自己做了一些进展…使用grid.getFilter()返回过滤器的JSON表示,然后使用json.strin
我有这个代码:dojo.declare("City",null,{constructor:function(cityid,cityinfo){}});dojo.declare("TPolyline",GPolyline,{constructor:function(points,color){},initialize:function(map){});应该是什
我遇到的问题是我的所有javascript错误似乎来自dojo.xd.js或子模块.我正在使用chrome调试器和许多dijit功能,如dijit.declaration和dojo.parser.这有点烦人,因为它很难找到简单的错误或滑倒.我希望我可以添加一个选项,允许我的调试器在我的非dojo代码中显示选项会发生的位置.我是
我正在使用DojoToolkit数字/解析函数来处理格式化和使用ICU模式语法解析字符串.有没有人知道有可能采取任意ICU模式字符串并以某种方式使用Dojo(或其他)库将其分解为它的部分(例如,对于数字模式,它可以被分解为小数位数,数千个分组等…).我希望这样做,而不需要让我的代码密切了
我有两个看似相关的问题,访问在不同的地方定义的javascript函数.我遇到的第一个问题是调用我在firgbug或safari控制台中定义的函数.我定义了一个名为getRed的函数,如下所示:functiongetRed(row,col){//dosomethingstuffandreturntheredvalueasa
我想添加一个在Ajax调用中指定的外部样式表.我已经找到了一种方法来使用jQuery(参见下面的示例),但是我需要使该方法适应dojoJavaScript框架.JQuery示例$('head').append('<linkrel="stylesheet"type="text/css"href="lightbox_stylesheet.css">');谢谢.解决方法:一旦你
我正在尝试使用dojo.connect将onMouseDown事件连接到图像,如:dojo.connect(dojo.byId("workpic"),"onMouseDown",workpicDown);functionworkpicDown(){alert("mousedown");}类似的代码几行后,我将onMouse*事件连接到dojo.body确实完全正常工作.但是当我点击图像时