我正在探索将DGrid用于我的Web应用程序。我想要一个类似于this的表格。 上面示例的代码是here。
该表使用内存存储作为其数据源 - 当我们单击并展开每一行时,会显示汇总字段。
我希望在点击行时从服务器获取详细信息(即单击行时显示的文本),而不是静态加载页面的其余部分。 如何修改上面的代码才能做到这一点?
(我的要求是一个HTML表格,每一行都可以在点击时展开,其中每个扩展的数据都是从服务器获取的,例如使用AJAX。我只是在探索dgrid作为一个选项,因为我得到了可排序的列dgrid免费。如果有更好的选择,请告诉我)
编辑:基本上我正在寻找这样做的想法,而不是期望任何人实际给我代码。由于对Dojo不太熟悉,我不确定什么是正确的方法
答案 0 :(得分:1)
如果你的ajax调用返回html,你可以在你的渲染器中放置一个dijit / layout / ContentPane,并在ContentPane的href属性中设置你想要获取的内容的url。假设您的初始数据(相当于示例的内存存储)将包含一个名为“yourServiceCallHref”的属性,其中包含您想要延迟加载的URL,您可以尝试这样做:
require(["dijit/layout/ContentPane", ...], function(ContentPane){
renderers = {
...,
table: function(obj, options){
var div = put("div.collapsed", Grid.prototype.renderRow.apply(this, arguments)),
cp = new ContentPane({
href : obj.yourServiceCallHref
}),
expando = put(div, "div.expando", cp.domNode);
cp.startup();
return div;
}
});
如果您的服务返回json,您可能会以类似的方式对dojo/request执行某些操作。只需在请求回调中添加dom创建步骤,并将它们放在名为“expando”的div中......
另一种选择是用JsonRest存储替换Memory存储,并让服务器输出与你在Memory存储上看到的相同的json格式。这意味着所有数据都将通过一次通话获取......