所以,我有一个dojo脚本,其中我将4行推入数据网格。像这样的东西,
var data = {
identifier: "id",
items: []
};
var data_list = [
{ col1: "normal", col2: false, col3: 'Cut are not followed by two hexadecimal', col4: 29.91},
{ col1: "important", col2: false, col3: 'Decause a % sign always indicates', col4: 9.33},
{ col1: "important", col2: false, col3: 'Aigns can be selectively', col4: 19.34},
{ col1: "normal", col2: false, col3: 'Begin the action', col4: 5.6}
];
var rows = 4;
for(var i = 0, l = data_list.length; i < rows; i++)
{
data.items.push(lang.mixin({ id: i+1 }, data_list[i%l]));
}
var store = new ItemFileWriteStore({data: data});
/*set up layout*/
var layout = [[
{name: 'Column 1', field: 'id', width: '100px'},
{name: 'Column 2', field: 'col2', width: '100px'},
{name: 'Column 3', field: 'col3', width: '200px'},
{name: 'Column 4', field: 'col4', width: '150px'}
]];
/*create a new grid*/
var grid = new DataGrid({
id: 'grid',
store: store,
structure: layout,
rowSelector: '20px'});
然后,我有一个使用
的功能dojo.forEach(grid.store._arrayOfAllItems, function (item) {
//do something
}
但在调用forEach循环之前,我需要根据 col3
对项目进行排序现在,要根据 col3 对项目进行排序,我已尝试
var noOfItems = store._arrayOfAllItems.length;
var items = new Array(noOfItems);
for(i = 0; i < noOfItems; i++)
{
items[i] = grid.getItem(i);
}
for(i = 0; i < noOfItems; i++)
{
for(j = 0; j < noOfItems - 1; j++)
{
var a = store.getValue(items[j], "col3");
var b = store.getValue(items[j+1], "col3");
if(a.localeCompare(b) == 1)
{
[items[j], items[j+1]] = [items[j+1], items[j]];
}
}
}
grid.setItems(items);
但即便如此,
for(i = 0; i < grid.store._arrayOfAllItems.length; i++)
{
var items = grid.store._arrayOfAllItems;
document.write(grid.store.getValue(items[i], "col3")+"<br>");
}
打印未排序的项目排列。 我也尝试过使用
grid.store.fetch({onComplete: displaySortItems , sort: [{attribute: "col3"}] });
但事实证明fetch()不会返回任何内容fetch() FAQ,即使我尝试对 displaySortItems()中的项目进行排序,也不会超出函数的范围。< / p>
那么,在使用grid.store._arrayOfAllItems
时,有什么办法可以获得一个排序数组(基于 col3 )。
或
即使使用grid.store._arrayOfAllItems
,我是否可以对items数组进行排序并使更改保持不变。请帮忙!
答案 0 :(得分:0)
您需要编写回调函数才能使用fetch()。 ItemFileReadStore的文档提供了example for custom sorting。 至少你需要一个onComplete和onError函数。
var gotItems = function(items, request) {
// Process your items here
for(i = 0; i < items.length; i++) {
console.log(items[i]);
}
};
var fetchFailed = function(error, request) {
alert("Fetch failed");
};
var sortAttributes = [{attribute: "col3", descending: false}];
store.fetch({query: {}, onComplete: gotItems, onError: fetchFailed, sort: sortAttributes});
更新:fetch()
在传递项目时排序,而不是在内部排序。如果您想再次排序,可以再次致电fetch()
,为onComplete
提供另一项功能。
在以&#39; _&#39;开头的dojo属性中,(如_arrayOfAllItems)被视为私有&#39;。您仍然可以访问它们,但修改它们并不是一个好主意。 ItemFileWriteStore将在内部进行管理。如果您想要一个排序数组,您可以在传递给fetch()
的函数中构建自己的副本。
答案 1 :(得分:0)
初始化网格时可以声明排序顺序。
var grid = new Grid({
sortInitialOrder: [{colId: "Genre", descending: true},{colId: "Artist", descending: true}]
});