我對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