我对dojo相对比较陌生,并且已经看到datagrid如何提供一种动态过滤功能,可根据您输入到过滤器文本输入中的内容来减少可见行。我还没有找到任何关于如何使用dgrid来做的例子。如果可以完成,请提供一个示例,或者将我指向提供教程或示例的资源。谢谢!是否有可能在数据网格中筛选dgrid中的数据?如果是这样,怎么样?
7
A
回答
19
是的,这是可能的。使用dgrid/OnDemandGrid
并定义query
函数将返回true
或false
根据您的逻辑为dojo/store
为电网供电的每行。
我准备的例子在的jsfiddle与玩:http://jsfiddle.net/phusick/7gnFd/,所以我不必解释太多:
查询功能:
var filterQuery = function(item, index, items) {
var filterString = filter ? filter.get("value") + "" : "";
// early exists
if (filterString.length < 2) return true;
if (!item.Name) return false;
// compare
var name = (item.Name + "").toLowerCase();
if (~name.indexOf(filterString.toLowerCase())) { return true;}
return false;
};
网格:
var grid = new Grid({
store: store,
query: filterQuery, // <== the query function for filtering
columns: {
Name: "Name",
Year: "Year",
Artist: "Artist",
Album: "Album",
Genre: "Genre"
}
}, "grid");
0
我知道这不是所问问题的答案,所提供的答案是高超的,我们使用它很多。
但是,如果您使用TreeGrid(具有“dgrid/tree”插件的列),则此功能似乎不起作用。我已经编写了一些代码来模拟与树网格接受的答案相同的行为。它基本上只是循环访问商店中的商品,并隐藏任何不符合您提出的条件的行元素。以为我会分享它,以防它有助于任何人。这是相当丑陋的,我相信它可以改进,但它的作品。
它基本上使用与phusick的答案相同的概念。您需要观看一个文本框的值,但不是刷新你的网格它调用一个函数:
textBox.watch("value", lang.hitch(this, function() {
if (timeoutId) {
clearTimeout(timeoutId);
timeoutId = null;
};
timeoutId = setTimeout(lang.hitch(this, function() {
this.filterGridByName(textBox.get('value'), myGrid);
}, 300));
}));
而这里的功能:
filterGridByName: function(name, grid){
try {
for (var j in grid.store.data){
var dataItem = grid.store.data[j];
var childrenLength = dataItem.children.length;
var childrenHiddenCount = 0;
var parentRow = grid.row(dataItem.id);
for (var k in dataItem.children){
var row = grid.row(dataItem.children[k].id);
var found = false;
if (dataItem.children[k].name.toLowerCase().indexOf(name.toLowerCase()) != -1){
found = true;
}
if (found){
if (row.element){
domStyle.set(row.element, "display", "block");
}
if (parentRow.element){
domStyle.set(parentRow.element, "display", "block");
}
} else {
childrenHiddenCount++;
// programmatically uncheck any hidden item so hidden items
for (var m in grid.dirty){
if (m === dataItem.children[k].id && grid.dirty[m].selected){
grid.dirty[m].selected = false;
}
}
if (row.element){
domStyle.set(row.element, "display", "none");
}
}
}
// if all of the children were hidden, hide the parent too
if (childrenLength === childrenHiddenCount){
domStyle.set(parentRow.element, "display", "none");
}
}
} catch (err){
console.info("error: ", err);
}
}
相关问题
- 1. 是否有可能整合Vaadin与Rails?如果是这样,怎么样?
- 2. 是否可以在WPF中使用Kit3D?如果是这样,怎么样?
- 3. FFI可以处理数组吗?如果是这样,怎么样?
- 4. 你能分割一个图形数据库吗?如果是这样,怎么样?
- 5. UAT数据应该是生产的镜像吗?如果是这样,怎么样?
- 6. clojure是否允许线延续?如果是这样,怎么样?
- 7. XML序列化是否与XML数据绑定真的不同,如果是这样,怎么样?
- 8. 是否可以在localStorage中设置不可修改的(常量)项目?如果是这样,怎么样?
- 9. 多维可变向量:可能吗?如果是这样,怎么样?
- 10. 检查表格单元格块是否有数据,如果是这样,更改样式
- 11. 是否有可能让Ant为特定目标打印出类路径?如果是这样,怎么样?
- 12. 是否有可能确定使用JavaScript将滚动到哪里?如果是这样,怎么样?
- 13. 在这个例子中是否存在竞争条件?如果是这样,怎么可能避免?
- 14. 是否可以从java中更改CMD目录?如果是这样,怎么样? (如 “CD”,在CMD)
- 15. 是否可以在XML文件的多行中分割字符串?如果是这样,怎么样?
- 16. 这是什么样的数据?
- 17. 这是什么样的数据结构?
- 18. 应该在PowerPC中总结有效地址'wrap'?如果是这样,怎么样?
- 19. 是否可以在没有IIS的情况下安装和使用OpenRasta?如果是这样,怎么样?
- 20. 是否可以在dataview.rowfilter中使用2个参数?怎么样?
- 21. 是否可以在Core数据中添加像primarykey这样的功能?
- 22. 在Java中是否存在这样的数据类型?
- 23. Swift中怎么可能这样?
- 24. 是否有像流这样的数据结构,但是很弱?
- 25. 填充已获取的文档。这是可能的,如果是这样,怎么样?
- 26. 这可能使用重写规则,如果它是怎样的?
- 27. 是否可以从自定义操作中访问产品名称?如果是这样,怎么样?
- 28. 是否可以通过SDO轮询CANOpen变量,如果是这样,怎么办?
- 29. asp.net从proc多个结果集:是否有必要将结果映射到类?如果是这样,怎么样?
- 30. 我怎样才能获得数组数据源,剑道网格?
感谢phusick!很有帮助! 你可以解释一下这行: if(〜name.indexOf(filterString.toLowerCase())){return true;} – teaman 2012-09-04 18:02:39
也好奇你为什么在filterString的末尾附加“”。是将它转换为字符串吗? – teaman 2012-09-04 21:37:45
是的,根据我需要'长度'和'toLowerCase()'使它成为一个字符串。 _tilde_或bitewise NOT运算符比'name.indexOf(filterString.toLowerCase())> -1'更短,在某些浏览器中[更快](http://jsperf.com/indexof-and-tilde/2)。参见[Tilde的大奥秘(〜)](http://www.joezimjs.com/javascript/great-mystery-of-the-tilde/)。 – phusick 2012-09-05 17:55:35