9

我们公司搬迁dojox/DataGrid到了dgrid一段时间。现在我们发现,dgrid似乎不支持开箱即用的 dijit/dojox 小部件。

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

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

具体如何?

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

4

1 回答 1

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");

}
于 2012-11-22T08:02:45.123 回答