【发布时间】:2012-05-21 22:04:41
【问题描述】:
我有一个数据网格,其中每一行都有一个列,其中我定义了一个格式化程序,以根据数据库中的内容格式化显示结果,并创建一个 div,其背景颜色取决于数据库。
我的数据网格有这个结构:
structure: [
{
name: "Name",
field: "name",
width: "auto"
},
{
name: "Initials",
field: "initials"
},
{
name: "E-mail",
field: "email",
width: "auto"
},
{
name: "Kerberos",
field: "kerberos",
width: "120px",
formatter: function(kerberos){
var format = "";
if(kerberos == "password expired" || kerberos == "account expired"){
format = '<div class="yellow" title="'+kerberos+'">'+kerberos+'</div>';
}else if(kerberos == "ok"){
format = '<div class="green" title="'+kerberos+'">'+kerberos+'</div>';
}else{
format = '<div class="red" title="Has no kerberos account">not available</div>';
}
return format;
}
},
当我按列标题进行排序时,它对行进行排序,放置不一致,所以我不知道它是否正确排序(见下图)。如何定义数据网格必须对该列进行排序的方式?
由于<> 字符,我认为这是我在格式化程序中执行的HTML <div...> 部分,但如果我只输出文本(根据我的理解,应该按字母顺序排序),它仍然很奇怪。有谁知道为什么会发生这种情况以及我该如何解决?
编辑: 忘了添加我如何获取/分配数据。我从 JSON 格式的 xhr.post 中获取了大量数据,然后我执行以下操作:
dojo.xhr.post({
url: "/cgi-bin/users.cgi",
handleAs: "json",
content: {
psearch: "dojoXhrBlank"
},
load: function(jsondata){
// Creating a store for the datagrid
var personStore = new Memory({ data: jsondata });
// Create datastore for datagrid
var gridStore = ObjectStore({objectStore: personStore});
...
【问题讨论】:
-
只是尝试输入数字(1、2 和 3)而不是纯文本......它的排序仍然与上图相同。我不明白,数据网格是否可以同时基于“kerberos”列和另一列进行排序?只是认为它会是有线的,因为我没有在任何地方定义它:/
-
可以看到我正在寻找与比较器映射等效的东西。我尝试在数据网格上使用comparatorMap(例如:myGrid.comparatorMap["kerberos"] = function(a,b){};)但我没有解决我的排序问题:/
标签: javascript datagrid dojo