dojo dgrid里面的小部件

Gau*_*nan 9 dojo datagrid dojox.grid dojox.grid.datagrid dgrid

我们公司从移动dojox/DataGrid到dgrid一段时间回来.现在我们发现,dgrid似乎不支持开箱即用的dijit/dojox小部件.

dojox/DataGrid有一个formatter()可以返回小部件.在那里很容易做到!GitHub上的API比较说

"dgrid支持格式化程序函数,但不支持从它们返回一个小部件.dgrid也有renderCell,它应该返回一个DOM节点.这可能表面上用于显示小部件(编辑器列插件就是这样做的).请注意,出于单元格编辑的目的,强烈建议使用编辑器列插件."

究竟怎么样?

我尝试过使用编辑器插件{editor: ' ', editorArgs:' '}.这确实渲染了一个小部件但限制性太强.例如,如何渲染a dijit/Button,其标签是单元格的值?或更复杂的东西,我怎么使用(鲜为人知的)dojox/image/MagnifierLite与<img>从格式化函数生成与src实体店的存在价值?

小智 14

你可以使用这个示例代码

require(
    [
        "dgrid/List",
        "dgrid/OnDemandGrid",
        "dgrid/Selection",
        "dgrid/editor",
        "dgrid/Keyboard",
        "dgrid/tree",
        "dojo/_base/declare",
        "dojo/store/JsonRest",
        "dojo/store/Observable",
        "dojo/store/Cache",
        "dojo/store/Memory",
        "dijit/form/Button",
        "dojo/domReady!"
    ],

    function(
        List, 
        Grid, 
        Selection, 
        editor, 
        Keyboard, 
        tree, 
        declare, 
        JsonRest, 
        Observable, 
        Cache, 
        Memory, 
        Button
    ) {

        var columns = [
            {
                label:"Actions", 
                field:"id", 
                width: "200px", 
                renderCell: actionRenderCell
            }
        ];

        var actionRenderCell = function (object, data, cell) {

            var btnDelete = new Button({
                rowId : object.id,
                label: "Delete",
                onClick: function () {
                    myStore.remove(this.rowId);
                }
            }, cell.appendChild(document.createElement("div")));

            btnDelete._destroyOnRemove = true;

            return btnDelete;

        }

        grid = new (declare([Grid, Selection, Keyboard]))({
            store: myStore,
            getBeforePut: false,
            columns: columns
        }, "grid");

}
Run Code Online (Sandbox Code Playgroud)

  • 这段代码确实有效,但我确信它有内存泄漏.[避免使用removeRow](https://github.com/SitePen/dgrid/blob/v0.3.15/doc/usage/Working-with-Widgets.md#destroying-rendered-widgets) (3认同)