【问题标题】:Ext Tree, Data is displayed in console, but does not display on pageExt Tree,数据显示在控制台,但不显示在页面上
【发布时间】:2012-11-23 12:04:30
【问题描述】:

我的数据显示在控制台,但没有显示在 ExtJs 树中?

我的php文件

    $data = array();

    $sql = "";

    if (!isset($_POST['node'])) {
        // first select the top node that have no parent
        $sql = "SELECT id_no,value_data FROM extjs_tree WHERE parent IS NULL";
    } else {
        // select data with parent_id = $_POST['node']
        $sql = "SELECT id_no, value_data FROM extjs_tree WHERE parent = '". $_POST['node'] ."'";                                            
    }   

    $q = mysql_query($sql);

    while ($r = mysql_fetch_array($q)) {
        // check if have a child node                           
        $qq = mysql_query("SELECT id_no, value_data FROM extjs_tree WHERE parent = '". $r['id'] ."'");

        if (mysql_num_rows($qq) > 0) {
            // if have a child
            $r['leaf'] = false;
            $r['cls'] = 'folder';
        } else {
            // if have no child
            $r['leaf'] = true;
            $r['cls'] = 'file';
        }
        $data[] = $r;

    }               


    echo json_encode($data);

我的 JS 文件

Ext.require([
    'Ext.tree.*',
    'Ext.data.*',
    'Ext.tip.*'
]);

Ext.onReady(function() {
    Ext.QuickTips.init();

    var store = Ext.create('Ext.data.TreeStore', {
        proxy: {
            type:'ajax',
            actionMethods:'post',
            url:'get-nodes.php'


        },
        root: {
            text: 'Root Node',
            id: 'root_node',
            expanded: true
        },
        folderSort: true,
        sorters: [{
            property:'text',
            direction:'ASC'
        }]
    });

    var tree = Ext.create('Ext.tree.Panel', {
        store: store,
        renderTo: 'tree_el',
        height: 300,
        width: 250,
        title: 'Products Display'
    });
});

我得到了正确的树,我可以在控制台中看到数据。但是我看不到 ExtJs 显示值??

我现在的结果

我的预期结果应该是

【问题讨论】:

  • 旁注:$sql = "SELECT id_no, value_data FROM extjs_tree WHERE parent = '". $_POST['node'] ."'"; 行存在巨大的安全漏洞。 xkcd.com/327
  • 您需要将 value: 更改为 text: 或以不同方式映射您的模型,因为您使用的是默认 NodeMap。

标签: php html mysql extjs tree


【解决方案1】:

在您的情况下,您还可以将以下字段添加到您的商店:

{
  name: 'text',
  mapping: 'value'
}

【讨论】:

  • 我的商店看起来像这样,它不工作?? var store = Ext.create('Ext.data.TreeStore', { proxy: { type:'ajax', actionMethods:'post', url:'get-nodes.php', name: 'text', mapping: 'value'
  • 似乎您已将名称和映射字段添加到商店的代理中,而不是作为单独的字段。见docs.sencha.com/ext-js/4-0/#!/api/…
【解决方案2】:

每个响应项都必须包含text 字段。正如我从您的请求响应图像中看到的那样,您没有发送text 字段。响应应如下所示:

[{
    "id": 2,
    "text": "Fruits", // this field is required
    ...
},
    ...
]

【讨论】:

  • 店里需要吗?
  • @StrataGeeksCEO,不。响应 json。否则,您必须按照 Thomas 所指出的那样修改您的模型。
猜你喜欢
  • 2022-12-05
  • 1970-01-01
  • 2019-08-15
  • 2021-10-23
  • 2020-03-11
  • 1970-01-01
  • 2017-06-11
  • 1970-01-01
  • 2022-01-27
相关资源
最近更新 更多