Dojo数据网格:按单元格布局中的第一个值排序
Dojo datagrid: sort by first value in cell layout
我使用格式化器在不同的值上或周围添加一些html(链接,break和span)。现在的问题是该列没有排序。我认为这是因为列中的每个单元格都以相同的值开始(具有相同url的链接)。最终url将会不同)。
数据如下:
{id: 1, 'main': 'puma', 'description': 'A puma is a cat', 'url': 'http://www.google.com', 'filesize': '12.34', date: '2010-01-01'},
{id: 2, 'main': 'tiger', 'description': 'Tiger, another cat', 'url': 'http://www.google.com', 'filesize': '43.27', date: '2013-03-04'},
{id: 3, 'main': 'Wombat', 'description': 'wombat, not a cat', 'url': 'http://www.google.com', 'filesize': '59.01', date: '2011-03-08'}
这是用于布局的(省略了本示例中的其他列):
{name: 'Title', fields: ['main','description','url','filesize'], 'width': '200px',formatter: formatLink}
这是格式化器:
function formatLink(value){
return '<a href="'+ value[2] +'">'+value[0]+'</a><br />'+value[1]+'<span class="smalltxt"> File Size: ' + value[3] + 'MB</span>';
}
为清楚起见,查看所有操作:http://jsfiddle.net/QXYDK/6/
理想情况下,我不会在同一个单元格中拥有所有这些东西,但它需要这个项目。
中心列目前根本不排序。是否有一种方法可以选择按值[0]排序(第一个字段,'main')?
我不知道这是否是Dojo中的一个bug,但是Dojo只定义了对field
属性的排序。但是因为您使用的是带有formatter
的自定义字段,所以您只使用fields
而不使用field
。
解决方案是定义您想要排序的field
(在本例中为"main")。
你的布局代码将变成:
var layout = [
{name: 'Index', field: 'id'},
{name: 'Title', fields: ['main','description','url','filesize'],field: 'main', 'width': '200px',formatter: formatLink},
{name: 'Date', field: 'date', width: 10, formatter: formatDate}
];
默认情况下,Dojo对数据进行大小写敏感排序,这意味着Wombat(以大写字母开头)的排序将不同于puma和tiger(以小写字母开头)。要启用不区分大小写的排序,需要在存储中定义comparatorMap
,例如:
store.comparatorMap = new Object();
store.comparatorMap["main"] = function(a, b) {
if (a.toLowerCase() < b.toLowerCase()) {
return -1;
} else if (a.toLowerCase() == b.toLowerCase()) {
return 0;
} else {
return 1;
}
};
我也用这个新信息更新了你的JSFiddle。
相关文章:
- 使用数据上的角度更改设置集合的第一个元素的动画
- 当单击第一个李时,它显示内容一,当单击第二个李时,它显示内容二
- 字母计数:返回重复字母数最多的第一个单词
- 如何使用Javascript在HTML表中查找第一个空行
- 分页:如何用AJAX加载第一个页面
- 全局标志仅与第一个匹配项匹配的Regexp
- 访问ng repeat中的第一个项目
- 如何对select2自动完成结果进行排序,只显示以第一个字母开头的项目
- 动态生成<选择>未显示已排序列表中的第一个项目
- 根据属性的第一个数字对数组进行排序
- 在第一个由 angularjs 选择中排序默认选项
- jQuery UI 可排序:无法将第一个元素添加到链接元素
- 使用按钮单击将 jQuery UI 可排序元素设置为第一个位置
- JavaScript - 数组仅对第一个字母/仅对第一个数字进行排序
- 对页面上的每个选择进行排序时忽略第一个选项
- AngularJS-选择列表中的第一个选项's在模板中重新排序
- Dojo数据网格:按单元格布局中的第一个值排序
- 按数组的第一个字符排序
- 根据二级数组中的第一个字符串从最大到最小的字符串大小对2维数组进行排序
- 根据第一个单词对对象数组进行排序