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>