【问题标题】:PropertyGrid alike with dgridPropertyGrid 与 dgrid 类似
【发布时间】:2016-07-05 11:16:52
【问题描述】:

我想使用 dgrid(和 dojo)创建一个类似的 PropertyGrid。据我所知,一列可能只包含一个编辑器类型。是否有任何解决方法可以为同一行中的不同单元格设置不同的编辑器控件?

Editor mixin 似乎为每行创建一个缓存的编辑器控件,但也许我错过了一些东西。

非常感谢!

【问题讨论】:

    标签: dgrid


    【解决方案1】:

    没有可用于实现您所描述的功能的 mixin。但是,你可以做这两件事之一。

    1) 您可以使用列中的 renderCell 函数代替编辑器,根据列值/行数据返回不同的输入/小部件。在这种情况下,您需要处理事件并更新商店。

    2) 如果您仍想使用编辑器,有一个解决方法。通过使用 dojo/aspect。您需要听网格的 insertRow 方法。并使用单元格元素的适当小部件更新单元格。下面是相同的sn-p。

    aspect.after(grid, "insertRow", lang.hitch(this, 'updateRowWidgets'));
    
    function updateRowWidgets(rowElement){
        var cell = grid.cell(rowElement, <columnid>);
        var rowdata = cell.row.data;
    
        var rowWidget = .... //Create your widget according to row data.
        cell.element.widget = rowWidget;
    
        return rowElement; // remember to return this.
    }
    

    希望这对您有所帮助。

    更新:第二个选项仅适用于 editOn,因为小部件将在 editOn 事件之后显示/添加到网格中,并且您可以在此之前切换小部件。否则,小部件将在 insertRow 完成之前添加到网格中。

    【讨论】:

    • 谢谢,第一个选项似乎最有希望,但由于我被卡住了,我尝试了第二个。在 updateRowWidgets 中,cell.element 是未定义的。知道出了什么问题吗?
    • cell.element 不能未定义,因为它是单元格的节点。可能有 2 种可能性是未定义的。 1) 单元格尚未生成。 2)作为参数传递的columnid是错误的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多