符合Ext tree的全国城市列表json格式

需要实现一个多级的中国城市选择树,在以下工程的基础上改进实现了一个:

http://ext-ux-form-combotree.googlecode.com/svn-history/r9/trunk/0.2/Ext.ux.TreeCombo.js

该控件存在两个问题,会导致在同一页面同时存在多个tree控件会产生混乱:

1.

 

id:Ext.id(),

 所有控件共用一个id?

挪到initComponent方法中建立就可以了。

 

2.root节点是传入的,如果外部调用者复用一个root,同样会导致问题。

  可以改进为在initComponent中增加一个自适应检查:

 

if(!this.root)
	this.root = new Ext.tree.AsyncTreeNode({  });

 

控件修改好之后,数据从哪里拿呢?

以下链接给出了中国城市街道列表的json格式,

http://www.1netmedia.cn/base/blogview.asp?logID=1214

感谢同行的工作,赞一个!

但该格式并不符合Ext.tree对数据格式的要求,要求如下形式:

 

[{
    "text": "北京市",
    "checked": false,
    "leaf": false,
    "children": [{
        "text": "东城区",
        "checked": false,
        "leaf": true
    }, {
        "text": "西城区",
        "checked": false,
        "leaf": true
    }

 

  好吧,写一个简单的函数转换形式,打印到浏览器控制台好了。

函数允许设置转换深度level,字符串化利用了浏览器的native JSON API (ECMAScript 3.1定义)

 

var level_limit = 2;
function tree(city,level){
	var obj = {text:city.t,checked:false,leaf:true};
	if(city.s){
		if(level<level_limit){
			obj.leaf=false;
			obj.children=treecitys(city.s,level+1);
		}
	}
	return obj;
}

function treecitys(citys,level){
	var obj=[];
	for(var i=0; i<citys.length; i++){
		obj[obj.length]=tree(citys[i],level);
	}
	return obj;
}
var tcs = treecitys(areaJson,1);
var str_tcs = JSON.stringify(tcs);
console.log(str_tcs);

 

 

转载于:https://my.oschina.net/u/1440018/blog/543222

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值