我有一个dojox.grid.EnhancedGrid与dojox.grid.enhanced.plugins.Filter和dojo.store.Memory包装在dojo.data.ObjectStore。每当我尝试过滤时,所有记录都会从网格中删除。我得到一个"0的0项显示"的消息。当我点击"清除过滤器"时,网格仍然为空。
更新:情节越来越复杂。似乎只要按列对网格进行排序就可以清除网格。我试图得到一个基本的例子在这里工作:http://jsfiddle.net/wp64T/4/
我也遇到了同样的问题,只有在jQuery的帮助下,在后台定期运行网格过滤器才能解决这个问题。下面是一些示例代码;
// ADD JQUERY
<script src="http://code.jquery.com/jquery-latest.js"></script>
.
// PUT THIS IN THE <HEAD> OF THE PAGE
<script type="text/javascript">
$(document).ready(function() {
function filterTheDataGrid() {
if (dijit.byId("grid") != undefined) {
dijit.byId("grid").filter({color: "Red"});
}
}
// RUN THE filterTheDataGrid FUNCTION EVERY ONE SECOND (1000 MILLISECONDS) //
// LOWER '1000' FOR FASTER REFRESHING, MAYBE TO 500 FOR EVERY 0.5 SECOND REFRESHES //
var refreshDataGrid = setInterval(function() { filterTheDataGrid(); }, 1000);
}
</script>
.
// PUT THIS IN THE <HEAD> OF THE PAGE
<script type="text/javascript">
// SETUP THE LAYOUT FOR THE DATA //
var layoutItems = [[
{
field: "id",
name: "ID",
width: '5px',
hidden: true
},
{
field: "color",
name: "Color",
width: '80px'
}
]];
// Create an empty datastore //
var storeData = {
identifier: 'id',
label: 'id',
items: []
}
var store3 = new dojo.data.ItemFileWriteStore( {data : storeData} );
</script>
.
// PUT THIS IN THE <HTML> OF THE PAGE
<div id="grid" dojoType="dojox.grid.DataGrid" jsId="grid5" store="store3" structure="layoutItems" query="{ type: '*' }" clientSort="true" rowsPerPage="40"></div>
.
<script type="text/javascript">
function addItemToGrid(formdata) {
// THIS FUNCTION IS CALLED BY A DIALOG BOX AND GETS FORM DATA PASSED TO IT //
var jsonobj = eval("(" + dojo.toJson(formData, true) + ")");
var myNewItem = {
id: transactionItemID,
color: jsonobj.color
};
// Insert the new item into the store:
store3.newItem(myNewItem);
store3.save({onComplete: savecomplete, onError: saveerror});
}
</script>
您能提供jsFiddle的代码片段吗?如果没有它,我能提供的最佳猜测是您正在尝试过滤不存在的存储值,并且您的clear filter按钮只修改文本框,而不重新启动filter命令来重置它。
编辑:
请尝试http://download.dojotoolkit.org/release-1.4.0/dojo-release-1.4.0/dojox/grid/tests/test_data_grid.html
三个控制台命令:
dijit.byId("网格")。filter({name: "A*"})将给出所有以a开头的内容
dijit.byId("网格")。过滤器({name: "*"})将返回原始结果集(全部)。
dijit.byId("网格")。过滤器({name: "})将清除网格,没有匹配项。
我意识到这不是您使用的API (dojo.data.ObjectStore),但它应该遵循相同的逻辑。我的猜测是你最终试图过滤"和匹配什么,导致你的零元素网格。如果你想做的是begin -width/contains/ends-width.