我对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. 是否有可能在HTML5中有一个可搜索的输入表列,从数据库中提取数据?如果是这样,怎么样?
- 2. 是否有可能整合Vaadin与Rails?如果是这样,怎么样?
- 3. 是否可以使用数据库来存储机器学习数据?如果是这样,怎么样?
- 4. 是否可以在WPF中使用Kit3D?如果是这样,怎么样?
- 5. 在Django Url Dispatcher中获取http请求数据?这可能吗?如果是这样,怎么样?
- 6. FFI可以处理数组吗?如果是这样,怎么样?
- 7. UAT数据应该是生产的镜像吗?如果是这样,怎么样?
- 8. 你能分割一个图形数据库吗?如果是这样,怎么样?
- 9. clojure是否允许线延续?如果是这样,怎么样?
- 10. 是否有可能使ActionBar选项卡高度高于ActionBar高度?如果是这样,怎么样?
- 11. 是否可以使用python创建.mobi文件?如果是这样,怎么样?
- 12. 是否可以从vba更改MS Project选项菜单中的设置?如果是这样,怎么样?
- 13. 是否可以在localStorage中设置不可修改的(常量)项目?如果是这样,怎么样?
- 14. 可以覆盖java注释吗?如果是这样?怎么样?
- 15. 多维可变向量:可能吗?如果是这样,怎么样?
- 16. PayPal API是否允许您根据算法分配价格?如果是这样,怎么样?
- 17. 是否有可能确定使用JavaScript将滚动到哪里?如果是这样,怎么样?
- 18. 是否有可能让Ant为特定目标打印出类路径?如果是这样,怎么样?
- 19. 检查表格单元格块是否有数据,如果是这样,更改样式
- 20. 在这个例子中是否存在竞争条件?如果是这样,怎么可能避免?
- 21. 是否可以从java中更改CMD目录?如果是这样,怎么样? (如 “CD”,在CMD)
- 22. 是否可以在XML文件的多行中分割字符串?如果是这样,怎么样?
- 23. 这是什么样的数据?
- 24. 这是什么样的数据结构?
- 25. 我应该在Redis中为用户特定的数据使用散列吗?如果是这样,怎么样?
- 26. 应该在PowerPC中总结有效地址'wrap'?如果是这样,怎么样?
- 27. 是否可以在没有IIS的情况下安装和使用OpenRasta?如果是这样,怎么样?
- 28. 是否可以在dataview.rowfilter中使用2个参数?怎么样?
- 29. Codedinter风格的Flash数据?怎么样?可能?
- 30. 是否可以在Core数据中添加像primarykey这样的功能?
感谢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