【问题标题】:Ext: how can I use data from an ajax request to modify an existing Javascript element?Ext:如何使用来自 ajax 请求的数据来修改现有的 Javascript 元素?
【发布时间】:2013-08-08 21:21:43
【问题描述】:

几天来,我一直在寻找有关如何正确执行此操作的解释。我试图为 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 将节点从数据库中取出。这很有效,我得到了节点的字符串表示,通过 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); }
    });
}

正如您想象的那样,警报仅用于测试目的。服务器请求完成后,它会显示从数据库中获取的节点的字符串表示形式。仅将此节点设置为树是我无法完成的。

我们拥有的 ext 许可证适用于 Ext 3.4.0。

【问题讨论】:

标签: javascript ajax extjs


【解决方案1】:

问题完全是另外一回事。我认为不可能从 Ajax 语句中与在 Ajax 语句之外声明的变量进行通信。原来我有一个'['和']'太多了。我的目标期待像这样的'',但我给了它一个只有一个成员'[]'的数组。不过这有点奇怪,因为在其他情况下,Ext 只会接受作为数组的节点,不管有多少。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多