几天以来,我一直在寻找如何做到这一点的解释。我试图为JS或Ajax找到一个不错的教程,但我找到的所有这些都是相当基础的并且不够深入。当我想用Python解决问题时,我去Python.org,对于PHP我使用php.net,但我还没有找到适合JS和Ajax的资源。任何提示都表示赞赏。
所以我会试着解释一下我做了什么。我有一个相当简单的页面,左边有一个div,右边有一个div。在左边的一个树中,一个树被渲染,代表一个注册表,在右边一个,显示和编辑值。
树存储在全局变量中。我已经阅读了有关使用全局变量的所有警告,但我认为在这种情况下它是合理的。每当访问此页面时,都会显示树。
var tree;
...
function initTree(treeRootConfig) {
return new Ext.tree.TreePanel({
renderTo : 'tree'
,width : 500
,height : 498
,autoScroll : true
,resizable : true
,useArrows : false
,animate : true
,loader : {
dataUrl : urls.urlLoadTree,
listeners: { beforeload : function(treeLoader, node) {} }
},listeners: {
click : function(node, e) { valueGrid.load(node.id); }
,contextmenu : function(node, e) {
cmPath.node = node;
cmPath.showAt(e.getXY());
},
},root : treeRootConfig
});
}
有一个文本字段,其中包含树正在显示的路径的文本重新定位。
function initTextfieldPath() {
return new Ext.form.TextField({
fieldClass : 'textfieldPath',
applyTo : 'path',
enableKeyEvents: 'true',
listeners : { change : function() { refreshTree(); } },
});
}
每个节点都是路径中的“文件夹”。现在,当访问新节点时,相应地修改文本字段的值。这工作正常。当在文本字段中输入新路径时,我希望重新加载树以显示节点。解析路径,然后使用Ajax将节点从数据库中取出。这是有道理的,我得到节点的字符串represantation,通过JSON编码并尝试将节点设置为树的新根。
function refreshTree() {
Ext.Ajax.request({
url : urls.DirectAccess
,scope : tree
,params : { path: textfieldPath.getValue() }
,success: function(response, opts) {
alert(response.responseText);
tree.setRootNode(Ext.util.JSON.decode(response.responseText)); }
,failure: function(response, opts) { noConnection(response); }
});
}
您可以想象,警报仅用于测试目的。完成服务器请求后,它将显示从数据库中提取的节点的字符串represantation。只是将这个节点设置为树是我无法完成的事情。
我们拥有的ext许可证适用于Ext 3.4.0。
答案 0 :(得分:0)
问题完全是另一回事。我认为不可能在Ajax语句中与Ajax语句之外声明的变量进行通信。事实证明我有一个'['和'''太多了。我的目标是期待这样的''但是我给了它一个只有一个成员'[]'的数组。虽然它有点奇怪,因为在其他情况下,Ext只接受节点作为数组,无论有多少。