禁用DOJO / Gridx网格中的行

wrrgggsh  于 2022-12-16  发布在  Dojo
关注(0)|答案(2)|浏览(173)

我在Gridx中创建了一个网格,其中列出了一组用户。单击网格中的一行(该行的任何部分),将弹出一个对话框,显示有关该用户的其他信息以及可以为该用户执行的操作(禁用用户、忽略用户等)-当从弹出窗口中选择其中一个选项时,我希望禁用该行。获取该行的逻辑,我可以处理,但我不知道如何使网格行实际上“显示”为禁用,以及如何使该行不再可单击。
有没有简单的方法可以做到这一点?如果您不熟悉gridx,那么适用于EnhancedGrid或其他Dojo网格的解决方案也是值得赞赏的。

uhry853o

uhry853o1#

好了,现在我有一点更多的信息,这里是一个解决方案:
在Grid小部件或其父代码中保留一个到目前为止禁用的所有行的列表,然后在onRowClick侦听器上编写如下代码:

on(grid, "onRowClick", function(e) {
    if(disabledRows[rowIndex]) {
        return;
    }

    // Do whatever pop up stuff you want and after
    // a user selects the value, you can "disable"
    // your row afterwards by adding it to the disabled
    // list so that it can no longer be clicked on.

    var rowIndex = e.rowIndex;
    disabledRows[rowIndex] = true;

    // This is just some random class I made up but
    // you can use css to stylize the row however you want
    var rowNode = e.rowNode;
    domClass.add(rowNode, "disabled");

});

注意,domClass就是我命名的“dojo/dom-class”。希望这能有所帮助!

q7solyqu

q7solyqu2#

这也许并不完全是你所寻求的:
如果你想用你自己的过滤函数隐藏一行或多行,你可以在DOM中添加你自己的类来实现nodisplay。这里我向你展示了一个函数,它只显示那些在过滤列表中的可选字段/列中有值的行。

function hideRowFilter(gridId, fieldName, filterList)
{
    var store = gridId.store;
    var rowId;
    store.query(function(object){
        rowId = gridId.row(object.id,true).node();
        if  (filterList.indexOf(object[fieldName]) == -1)
            domClass.add(rowId, "noDisplay"); // anzeigen
        else
            domClass.remove(rowId, "noDisplay"); // verstecken
    });
}

CSS:

.noDisplay { display: none; }

例如,我可以通过以下调用只显示myState为3或4的条目:

hideRowFilter(gridId, 'myState', [3, 4]);


注意,domClass就是我命名的“dojo/dom-class”

相关问题