Extjs4 组件在创建后再设store 问题很简单就是一般我们单文件创建组件的时候的顺序是model》store》panel,我的问题是我想先创建panel再通过ajax为这个panel赋store,请问怎么弄呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 store晚于组件load或者你可以在组件内部new一个store用监听来控制,grid的话就没必要了 var store = Ext.create('Ext.data.TreeStore', { proxy: { type: 'ajax', url : '...' }, autoLoad: true, root: { text: 'text', expanded: true }});var tree=Ext.create('Ext.tree.Panel', { store: store, rootVisible: true, bodyStyle:'border-width:0px' }); 我主要是因为有串这样的数据{ "json":[ [ { "children":[ { "children":[ { "leaf":true, "text":"aaaa" }, { "leaf":true, "text":"bbbb" } ], "leaf":false, "text":"nnn" }, { "children":[ { "leaf":true, "text":"ccc" }, { "leaf":true, "text":"ddd" } ], "ids":15, "leaf":false, "text":"ooo" }, { "children":[ { "leaf":true, "text":"ggg" }, { "leaf":true, "text":"hhh" } ], "leaf":false, "text":"kkk" }, { "children":[ { "leaf":true, "text":"lll" } ], "leaf":false, "text":"ppp" }, { "children":[ { "leaf":true, "text":"qqq" }, { "leaf":true, "text":"cvbcvb" } ], "leaf":false, "text":"nbbnmfgh" }, { "children":[ { "leaf":true, "text":"ertert" }, { "leaf":true, "text":"uiouio" }, { "leaf":true, "text":"m,.m,." } ], "leaf":false, "text":"khjkj" }, { "children":[ { "leaf":true, "text":"bnmn" }, { "leaf":true, "text":"rtytry" } ], "leaf":false, "text":"po[op[o" }, { "children":[ { "leaf":true, "text":"fghfgn" } ], "leaf":false, "text":"dfgfh" } ], "leaf":false, "text":"test" } ] ]}有大神帮帮我,怎么读这对数据吗!!! xtype:'xcomboboxtree', id : 'query.comCode',fieldLabel:'所属机构', enableClearValue:true,//显示清除值的trigger hiddenName:'comCode', emptyText:'请选择...',forceSelection : true,editable : false,width:100,//该域的长度 listWidth:180,//下拉框的长度 listHeight:200,//下拉框的高度 tree:new Ext.tree.TreePanel({ id : 'mytree', autoScroll:true, animate:true, enableDD:true, rootVisible : false, root:new Ext.tree.AsyncTreeNode({ id: '0', text:'<--请选择机构-->' ,loader:new Ext.tree.TreeLoader({ dataUrl:'queryAddListOrganizationAction.action', baseParams : { 'blBaseInfo.isAdSeries' : '1', 'blBaseInfo.flag' : '1', 'blBaseInfo.dataPower' : "<%=datapower%>" }, preloadChildren:true }) }) /*listeners : { 'beforeload' : function(node){ if(node.id == "0"){/定义子节点的Loader }else{ //定义子节点的Loader } } }*/ }), listeners:{ 'treenodeselect':function(combotree,node){ combotree.setValue(node.text); combotree.setHiddenValue(node.id); } } }这个是一个机构树的panel,调用了扩展,不过基本一样,监听里面beforeload可以帮助先加载数据,当然你也可以用其他事件先加载组件 大哥感谢你的回复但条用了beforeload事件之后怎么加载数据呢?这方面给点代码啊,这问题我已经发三帖,追加到140分了,所有分都给你,我只想要可行性的代码,是事件上做手脚我有试过,事件上用Ajax对吗?但这样有弊端,这也是我想问的另外一个大问题,就是我写一个方法,怎么让其返回值可以到处都能用,而不局限与只能在本类才能用呢,因为我试着讲事件中的方法独立出来,独立出来后的方法的返回值却是空的,还有一个问题是事件之间怎么相互传值,这问题和上面个问题接近,就是我定义两个事件,一个load,一个add,那我还定义一个var a,怎么让这个a可以在两个事件中穿梭呢 我不太了解你json是直接传到了前台还是通过其他方法,动态加载树的话,EXT无非是通过treeloader这些,至于ajax,ext本身就属于异步框架,所以使用的时候用ajax没有问题,你可以尝试将你后台拼装的树传到某个jsp,比如说struts2在配置文件中可以<result name="success" type="json" /><result name="comTree">/jsp/baseinfo/comTree.jsp</result>,JSP写成<%@ page language="java" contentType="text/html; charset=utf-8"%><%@ taglib prefix="s" uri="/struts-tags"%><s:property value="delCode" escape="false" />如果这样还是不能满足,建议你先讲自己的json写成静态的json或者xml文件,用你的panel去加载下,看是否可以使用,因为json格式很重要 不好意思,现在才回复您我的json数据是后台直接返回到页面的,返回到前台是有2-3个类是上面的json数据的,因为大家看到很晕,所以我截取了其中一个,还有我是不想用jsp,是不是我要读取这样的json对象数组就只能用ajax放在事件中来获取呢?还有其他问题如下二、三文件js,分别ABC三类,C中写一方法,让AB调用并输出C中返回的值。三、事件之间值调用,如在D。js中写2事件分别为load,render,问题二详解:就是首先有三个js,分别是A、B、C三个js,我在C.JS中写个方法,有返回值的,之后在A、B中分别调用,但我在A、B中调用这C中的方法获取到的返回值却是空的,请问怎么弄才能得到我这个想法呢问题三详解:假如我有个类A。js,给A写两个事件分别是render和load(哪个先调用我不知道,假设是load),我在load中获取一定的数据,假设是var a =1(var a的定义我会定义在类的开头),调用完load后类A自然调用render,那我在render中获取这个a,我获取到这个a的值是undefined的,我想问的问题就类是则这样,这个a怎么可以在事件中穿梭使用问题二的代码如下:首先是JS的引用,我用的是extjs4,看不太明白我改 <script type="text/javascript" src="app/util/Ajax.js"></script> <script type="text/javascript" src="ext/bootstrap.js"></script> <script type="text/javascript" src="app.js"></script>tree的代码:Ext.define('JSONTree', { extend : 'Ext.tree.Panel', listeners : { 'beforeadd' : function(container, component) { console.log(loadSession()); } } });C中的ajax: var data = [];function loadSession() { Ext.Ajax.request({ url : 'test.json', method : 'POST', timeout : 3000, success : function(response) { var rps = Ext.decode(response.responseText); data = rps.json; } }) return data;}问题三var panel = Ext.create('Ext.tree.Panel',{ width:100, height:100, render:Ext.getBody(), listeners : { aaa:function() { alert('vcxcv'); var a='123'; console.log('aaa'); return a; }, add : function() { alert('add'); alert('事件'+aaa()); } }, test:function() {alert('vcxcv'); var a='123'; console.log('test'); return a; }, bbb : function() { alert('bbb'); console.log('方法'+test()); } }); panel.bbb(); JS读取COOKIES insertRow() 设置事件 页面无效果 求助! 想在<TEXTAREA></TEXTAREA>例显示html源码,出问题 setTimeout的最大值为多少? 请教高手表单内容为数字范围的实时校验如何实现 如何一次性给页面中的表格所有单元格添加同一个事件 可以运行的代码放到另一个函数里就不能运行了。 救急啊!焦点定位的问题! location.replace()的用法正确吗?在线等待。。。。 如何给带参数的IMG src做变量 Js正则 多行匹配问题 select 的value问题
var store = Ext.create('Ext.data.TreeStore', {
proxy: {
type: 'ajax',
url : '...'
},
autoLoad: true,
root: {
text: 'text',
expanded: true
}
});var tree=Ext.create('Ext.tree.Panel', {
store: store,
rootVisible: true,
bodyStyle:'border-width:0px'
});
"json":[
[
{
"children":[
{
"children":[
{
"leaf":true,
"text":"aaaa"
},
{
"leaf":true,
"text":"bbbb"
}
],
"leaf":false,
"text":"nnn"
},
{
"children":[
{
"leaf":true,
"text":"ccc"
},
{
"leaf":true,
"text":"ddd"
}
],
"ids":15,
"leaf":false,
"text":"ooo"
},
{
"children":[
{
"leaf":true,
"text":"ggg"
},
{
"leaf":true,
"text":"hhh"
}
],
"leaf":false,
"text":"kkk"
},
{
"children":[
{
"leaf":true,
"text":"lll"
}
],
"leaf":false,
"text":"ppp"
},
{
"children":[
{
"leaf":true,
"text":"qqq"
},
{
"leaf":true,
"text":"cvbcvb"
}
],
"leaf":false,
"text":"nbbnmfgh"
},
{
"children":[
{
"leaf":true,
"text":"ertert"
},
{
"leaf":true,
"text":"uiouio"
},
{
"leaf":true,
"text":"m,.m,."
}
],
"leaf":false,
"text":"khjkj"
},
{
"children":[
{
"leaf":true,
"text":"bnmn"
},
{
"leaf":true,
"text":"rtytry"
}
],
"leaf":false,
"text":"po[op[o"
},
{
"children":[
{
"leaf":true,
"text":"fghfgn"
}
],
"leaf":false,
"text":"dfgfh"
}
],
"leaf":false,
"text":"test"
}
]
]
}
有大神帮帮我,怎么读这对数据吗!!!
xtype:'xcomboboxtree',
id : 'query.comCode',
fieldLabel:'所属机构',
enableClearValue:true,//显示清除值的trigger
hiddenName:'comCode',
emptyText:'请选择...',
forceSelection : true,
editable : false,
width:100,//该域的长度
listWidth:180,//下拉框的长度
listHeight:200,//下拉框的高度
tree:new Ext.tree.TreePanel({
id : 'mytree',
autoScroll:true,
animate:true,
enableDD:true,
rootVisible : false,
root:new Ext.tree.AsyncTreeNode({
id: '0',
text:'<--请选择机构-->' ,
loader:new Ext.tree.TreeLoader({ dataUrl:'queryAddListOrganizationAction.action',
baseParams : {
'blBaseInfo.isAdSeries' : '1',
'blBaseInfo.flag' : '1',
'blBaseInfo.dataPower' : "<%=datapower%>"
},
preloadChildren:true
})
})
/*listeners : {
'beforeload' : function(node){
if(node.id == "0"){/定义子节点的Loader
}else{ //定义子节点的Loader
}
}
}*/
}),
listeners:{ 'treenodeselect':function(combotree,node){ combotree.setValue(node.text); combotree.setHiddenValue(node.id);
}
}
}
这个是一个机构树的panel,调用了扩展,不过基本一样,监听里面beforeload可以帮助先加载数据,当然你也可以用其他事件先加载组件
<%@ page language="java" contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<s:property value="delCode" escape="false" />
如果这样还是不能满足,建议你先讲自己的json写成静态的json或者xml文件,用你的panel去加载下,看是否可以使用,因为json格式很重要
不好意思,现在才回复您我的json数据是后台直接返回到页面的,返回到前台是有2-3个类是上面的json数据的,因为大家看到很晕,所以我截取了其中一个,还有我是不想用jsp,是不是我要读取这样的json对象数组就只能用ajax放在事件中来获取呢?还有其他问题如下二、三文件js,分别ABC三类,C中写一方法,让AB调用并输出C中返回的值。
三、事件之间值调用,如在D。js中写2事件分别为load,render,
问题二详解:就是首先有三个js,分别是A、B、C三个js,我在C.JS中写个方法,有返回值的,之后在A、B中分别调用,但我在A、B中调用这C中的方法获取到的返回值却是空的,请问怎么弄才能得到我这个想法呢
问题三详解:假如我有个类A。js,给A写两个事件分别是render和load(哪个先调用我不知道,假设是load),我在load中获取一定的数据,假设是var a =1(var a的定义我会定义在类的开头),调用完load后类A自然调用render,那我在render中获取这个a,我获取到这个a的值是undefined的,我想问的问题就类是则这样,这个a怎么可以在事件中穿梭使用问题二的代码如下:
首先是JS的引用,我用的是extjs4,看不太明白我改
<script type="text/javascript" src="app/util/Ajax.js"></script>
<script type="text/javascript" src="ext/bootstrap.js"></script>
<script type="text/javascript" src="app.js"></script>tree的代码:
Ext.define('JSONTree', {
extend : 'Ext.tree.Panel',
listeners : {
'beforeadd' : function(container, component) {
console.log(loadSession()); }
}
});C中的ajax:
var data = [];
function loadSession() {
Ext.Ajax.request({
url : 'test.json',
method : 'POST',
timeout : 3000,
success : function(response) {
var rps = Ext.decode(response.responseText);
data = rps.json;
}
})
return data;
}问题三var panel = Ext.create('Ext.tree.Panel',{ width:100, height:100, render:Ext.getBody(), listeners : { aaa:function() { alert('vcxcv'); var a='123'; console.log('aaa'); return a; }, add : function() { alert('add'); alert('事件'+aaa()); } }, test:function() {alert('vcxcv'); var a='123'; console.log('test'); return a; }, bbb : function() { alert('bbb'); console.log('方法'+test()); } }); panel.bbb();