2

我有一个带有 JsonRestStore 绑定到后端 Rest API 的 EnhancedGrid。这就是我的代码:

     <script>

        /**
        * Creates Dojo Store.
        */

        require(["dojo/store/JsonRest"], function (JsonRest) {
            myStore = new JsonRest({ handleAs: 'json', target: 
                'https://api.twitter.com/1/statuses/user_timeline.json'+
                '?trim_user=true&screen_name=twitter&count=100' });
        });

        var layout = [[
            { name: 'Created at', field: 'created_at', datatype: 'string', 
                width: '100px' },
            { name: 'Message', field: 'text', datatype: 'string', 
                width: 'auto', autoComplete: true },
            { name: 'Source', field: 'source', datatype: 'string', 
                width: '200px', filterable: false },
            { name: 'Retweets', field: 'retweet_count', datatype: 'number', 
                width: '100px', disabledConditions: ["startsWith", "notStartsWith"] }
        ]];

        /**
        * Creates Dojo EnhancedGrid.
        */

        require(["dojox/grid/DataGrid",
            "dojox/grid/EnhancedGrid",
            "dojo/data/ObjectStore",
            "dojox/grid/enhanced/plugins/Filter",
            "dojox/grid/enhanced/plugins/NestedSorting",
            "dojox/grid/enhanced/plugins/Pagination", 
            "dojo/domReady!"
        ], function (DataGrid, EnhancedGrid, ObjectStore) {

            var grid = new EnhancedGrid({
                id: 'grid',
                store: dataStore = new ObjectStore({ objectStore: myStore }),
                structure: layout,
                //clientSort: "true",
                rowsPerPage: 5,
                rowSelector: "20px",
                selectionMode: "single",
                plugins: {
                    filter: {
                        ruleCount: 5,
                        itemsName: "Tweets"
                    },
                    nestedSorting: true,
                    pagination: {}
                }
            });

            grid.placeAt('grid5');
            grid.startup();  
        });
    </script>
    <div id="grid5"></div>

如您所见,我为我的网格使用了几个插件。过滤器插件工作正常。为此,我只使用客户端过滤。但是插件分页和嵌套排序不起作用。

排序:单击箭头“asc”或“desc”不会更改顺序。分页:导航到接下来的 25 个条目仍然包含与之前的页面相同的 25 个条目。

对于这两个插件,点击后似乎只是从后端加载新的 json 并再次呈现。网络流量也表明了这一点。有没有办法让它在客户端工作?

4

1 回答 1

1

您的 REST 服务必须支持插件所需的所有操作!如果您的服务支持这些操作并且仍然无法正常工作,那么插件从您的 REST API 访问数据的方式一定有问题。

如果您单击排序/分页元素,请使用诸如 firebug 之类的东西运行您的应用程序并查看会发生什么(= 从服务器请求的内容)。如果服务器响应没有排序或分页,那么您将必须配置插件,以便他们知道如何创建有效的 url(= 一个实际执行您期望的 url)。

另一种方法是在您的服务器上创建一些东西,将 dojo 请求映射到有效的 REST API 请求。

于 2013-04-18T07:52:40.737 回答