使用 dGrid 删除行时未解析 Dijit 多个小部件 (dgrid.io)

Dijit multiple widgets not parsed when row deleted with dGrid (dgrid.io)

我将 dGrid 0.4.1-dev (dgrid.io) 与自定义格式化程序一起使用(我已经尝试使用自定义渲染器)来 return raw HTML包含 Dijit 小部件,在页面加载期间,所有小部件都已正确解析,但在排序、分页或滚动时完全损坏(OnDemandGrid)。

在我的示例中,我在图标上使用了工具提示小部件(声明模式,见底部"Returned HTML for the cell")。

页面加载时:

滚动、排序、分页后...:[=​​23=]

为单元格返回 HTML(由格式化程序):

<div data-dojo-type="dijit/Tooltip" id="comxDynElement_101_dijit_1" data-dojo-props="connectId:'comxDynElement_101',position:['above']">Dupliquer cette facture</div><a href="..." id="comxDynElement_101"><i class="fa fa-clone"></i></a>
<div data-dojo-type="dijit/Tooltip" id="comxDynElement_102_dijit_1" data-dojo-props="connectId:'comxDynElement_102',position:['above']">Télécharger cette facture</div><a id="comxDynElement_102" href="..."><i class="fa fa-file-pdf-o"></i></a>
<div data-dojo-type="dijit/Tooltip" id="comxDynElement_103_dijit_1" data-dojo-props="connectId:'comxDynElement_103',position:['above']">Voir cette facture</div><a id="comxDynElement_103" href="..."><i class="fa fa-eye"></i></a>

我的格式化程序:

function (item) {
     return item;
}

Dojo Parser 正在构建小部件并在页面加载时启动。在页面加载后将新声明 html 添加到您的页面时,不会自动解析这些小部件。您需要手动执行此操作。

例如,应该可以在网格的 renderRow 函数中手动调用解析器。可以找到一个例子 here.

所以下面的代码可以工作:

   require([
        'dgrid/OnDemandList',
        'dojo/parser'
    ], function (OnDemandList,parser) {
        var list = new OnDemandList({
            collection: myStore, // a dstore collection
            renderRow: function (object, options) {
                var div = document.createElement('div');
                div.appendChild(document.createTextNode(object.myField));
                // only 'parse' new row, not whole document again.
                parser.parse(div);
                return div;
            }
        });
    });