jqGrid自动加载Treegrid问题。

jqGrid自动加载Treegrid问题。,jqgrid,tree,autoload,treegrid,Jqgrid,Tree,Autoload,Treegrid,我在自动加载树网格时遇到问题。 目前我有一个只有两层深的结构 1 a b c 2 a 当我单击展开一个节点时,网格似乎会再次添加根节点的另一个实例,以及根据所选的根节点显示的子节点 1 1 a b c 在选择根节点之前,请看一下XML: <?xml version="1.0" encoding="UTF-8"?> <rows> <page>1</page> <tot

我在自动加载树网格时遇到问题。 目前我有一个只有两层深的结构

1
    a
    b
    c 
2
    a
当我单击展开一个节点时,网格似乎会再次添加根节点的另一个实例,以及根据所选的根节点显示的子节点

1
1
    a
    b
    c
在选择根节点之前,请看一下XML:

<?xml version="1.0" encoding="UTF-8"?>
<rows>
    <page>1</page>
    <total>1</total>
    <records>1</records>
    <row>
        <cell>1112</cell>
        <cell>Parent 1</cell>
        <cell>0</cell>
        <cell>NULL</cell>
        <cell>false</cell>
        <cell>false</cell>
    </row>
</rows>
<?xml version="1.0" encoding="UTF-8"?>
<rows>
    <page>1</page>
    <total>1</total>
    <records>1</records>
    <row>
        <cell>1112</cell>
        <cell>Parent 1</cell>
        <cell>0</cell>
        <cell>NULL</cell>
        <cell>false</cell>
        <cell>false</cell>
    </row>
    <row>
        <cell>5207</cell>
        <cell>Child 1</cell>
        <cell>1</cell>
        <cell>1112</cell>
        <cell>false</cell>
        <cell>false</cell>
    </row>
</rows>
任何帮助都将不胜感激。 谢谢
-克里斯

你描述的行为真有趣!问题是子节点“child 1”没有标记为leaf
1112
后面的行
false
是isLeaf值)。因此,用户单击“Child 1”后,必须显示其所有子项。由于输入中未定义列“loaded”的值,因此树网格尝试从服务器加载id为5207的“Child 1”节点的子节点。因此,将请求发送到具有附加参数的相同url

nodeid=5207&parentid=1112&n\u级别=1

我们会完成的。因为您的服务器只是忽略这些参数并获取相同的XML数据,所以您会看到一幅疯狂的画面

(见演示)。 要解决此问题,您应该将“Child 1”节点标记为叶:

<row>
    <cell>5207</cell>
    <cell>Child 1</cell>
    <cell>1</cell>
    <cell>1112</cell>
    <cell>true</cell> <!-- here the "false" was changed to "true" -->
    <cell>false</cell>
</row>

5207
儿童1
1.
1112
真的
假的
并接收以下树网格

(请参见演示)或在XML文件中为“loaded”列添加附加数据,并使用“true”值:


1112
父1
0
无效的
假的
真的
真的
5207
儿童1
1.
1112
假的
假的
真的
并接收网格


(见演示)。我建议您以任何方式为“loaded”列包含“true”值。您得到的另一个好处是,您可以在加载时扩展任何节点。例如,在上一个演示中,我在根节点的“expanded”列中设置了“true”值,因此它将在加载时展开。

感谢您的回复。我已经添加了您为“已加载”建议的附加字段。因此,在第一次加载时,字段显示为false。单击父项展开字段后,该字段将显示为true,但这将以相同的行为结束。我让父母重复了一遍,但第二个例子显示了下面的孩子。此外,我不能将第一个孩子标记为叶子,因为第二层也是可扩展的(我的结构有3层深)。有什么想法吗?@cra:您应该在xml文件的所有
元素的末尾添加
true
。这意味着所有节点都具有“true”作为“loaded”属性。这意味着XML文件包含完整的数据,不应向服务器发送其他请求来检索子注释。再次感谢您的回复。当我将
true
添加到每个节点的末尾时,父节点将不再向服务器发出另一个请求。这意味着它将不会收到返回的子信息。我一定是遗漏了什么。我使用Fiddler来观察HTTP请求,当页面加载时,我会看到初始请求(和XML响应),然后当然会将根加载为折叠。但是,当我单击根节点展开并公开其子节点时,不会向服务器请求子节点信息。我做错了什么?另外,在再次阅读您的回复后,我想可能是我误解了什么。我希望有以下行为。根节点都在第一个请求时加载。展开节点时,会发出额外的请求,以检索刚展开的节点的子节点。这是必要的,因为数据集相当大,并且如果可以在扩展每个节点时执行,则无需为每个节点返回巨大的XML文件。这就是我认为“自动加载”功能的目的?@cra:只是现在你描述了需要在节点上动态提供子注释列表。这意味着,您当然不应该向“Child 1”节点添加“loaded”属性。相反,您应该修复服务器代码,以便它分析
nodeid
parentid
n_-level
输入参数并使用正确的数据进行响应,这些数据只包含
nodeid
节点的子节点。
<row>
    <cell>5207</cell>
    <cell>Child 1</cell>
    <cell>1</cell>
    <cell>1112</cell>
    <cell>true</cell> <!-- here the "false" was changed to "true" -->
    <cell>false</cell>
</row>
<row>
    <cell>1112</cell>
    <cell>Parent 1</cell>
    <cell>0</cell>
    <cell>NULL</cell>
    <cell>false</cell> <!-- is leaf -->
    <cell>true</cell>  <!-- should be expanded -->
    <cell>true</cell>  <!-- is loaded -->
</row>
<row>
    <cell>5207</cell>
    <cell>Child 1</cell>
    <cell>1</cell>
    <cell>1112</cell>
    <cell>false</cell> <!-- is leaf -->
    <cell>false</cell> <!-- should be expanded -->
    <cell>true</cell>  <!-- is loaded -->
</row>