1

我正在尝试创建一个动态表,该表将在整个使用过程中添加和删除行。我不想在以后要引用的每个容器上都加上 id。

例如,我想将隐藏输入添加到动态添加行的最后一个单元格。该行有一个 id,当我在最后一个单元格上没有 id 时如何使用 dojo.place() ?

var pmrCount = dojo.query("#pmhTable >tbody >tr").length;
var rowID = 'pmr_' + pmrCount;

var newPmrRow = 
    '<tr id="' + rowID + '">' +
        '<td>' + pmh + '</td>' +
        '<td>' + String(pmr.severity).charAt(0) + '</td>' + 
        '<td>' + pmr.customerName + '</td>' + 
        '<td>' + pmr.deviceType + '</td>' + 
        '<td>' + pmr.deviceModel + '</td>' +
        '<td>' + pmr.deviceSerial + '</td>' +
        '<td align="center"><a class="cancel-link"></a></td>' + 
    '</tr>';

//dojo.place(newPmrRow, dojo.query("#pmhTable >tbody"));

var newPmrHiddenInput = 
    '<input type="hidden" name="pmrs" value="'+ JSON.stringify(pmr)+ '">';

//dojo.query("#" + rowID + " td:last").place(newPmrHiddenInput);

两行注释的代码是我试图用功能代码替换的代码。这些不起作用,它们不会像其他语法错误一样在错误控制台中显示任何警告。不知道从这里去哪里。

我知道 dojo.query() 返回一个 NodeList 并且 place() 需要一个 DOM 节点或一个 ID。这样做的正确方法是什么?

4

2 回答 2

1

您想查看 Nodelist 的dojo/NodeList-dom扩展。它允许您将 NodeList 中的每个元素放入基于查询选择器的元素中。在 AMD 风格中,它看起来像:

require(['dojo/dom-construct', 'dojo/NodeList', 'dojo/NodeList-dom', 'dojo/domReady!'], function (domConstruct, NodeList) {
    var nodes = new NodeList([domConstruct.toDom('<div>someContent</div>')]);
    nodes.place('#x');

});

看着文档,我有点惊讶没有更简单的方法可以做到这一点,所以也许有比这更好的方法。

于 2013-10-16T12:17:05.617 回答
0

好吧,我发现两行代码似乎可以工作,但我不知道以 Array 样式引用 NodeLists 在技术上是否正确。这就是我所做的。

dojo.place(newPmrRow, dojo.query("#pmhTable >tbody")[0]);
dojo.place(newPmrHiddenInput, dojo.query("#" + rowID + "> td:last-child")[0]);
于 2013-10-15T20:53:24.957 回答