0

我有一个 dojox.grid.EnhancedGrid,一个 dojox.grid.enhanced.plugins.Filter 和一个 dojo.store.Memory 包装在一个 dojo.data.ObjectStore 中。每当我尝试过滤时,所有记录都会从网格中删除。我收到“显示 0 个项目中的 0 个”消息。当我单击“清除过滤器”时,网格保持为空。

更新:情节变厚了。似乎仅按列对网格进行排序就会清除网格。我正在尝试在这里工作的基本示例:http: //jsfiddle.net/wp64T/4/

4

2 回答 2

0

你能提供一个代码片段或jsFiddle吗?如果没有它,我能提供的最好的猜测是您正在尝试过滤不存在​​的存储值,并且您的清除过滤器按钮仅修改文本框并且不会重新触发过滤器命令来重置它。

编辑 :

请尝试http://download.dojotoolkit.org/release-1.4.0/dojo-release-1.4.0/dojox/grid/tests/test_data_grid.html

三个控制台命令:

dijit.byId("grid").filter({name : "A*"}) 将给出以 A 开头的所有内容。

dijit.byId("grid").filter({name : "*"}) 将返回原始结果集(全部)。

dijit.byId("grid").filter({name : ""}) 将清除网格,没有匹配项。

我意识到这不是您正在使用的 API(dojo.data.ObjectStore),但它应该遵循相同的逻辑。我的猜测是你最终试图过滤 "" 并且什么都不匹配,导致你的零元素网格。如果您正在寻找开始宽度/包含/结束宽度,请不要忘记星号。

于 2011-08-03T00:02:34.493 回答
0

我遇到了同样的问题,只能通过在一些 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>
于 2011-11-17T19:37:51.123 回答