javascript
  • dojo
  • 2013-10-15 53 views 0 likes 
    0

    我正在嘗試創建一個動態表,它將在整個使用過程中添加和刪除行。我不想把ID放在我後來想參考的每個容器上。如何將dojo.query()和dojo.place()一起使用?

    例如,我想添加一個隱藏的輸入到動態添加行的最後一個單元格。該行有一個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。什麼是正確的方法來做到這一點?

    回答

    1

    你想看看dojo/NodeList-dom擴展到Nodelist。它允許你將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'); 
    
    }); 
    

    望着文檔我有沒有更簡單的方法做這樣的驚訝,也許還有比這更好的辦法。

    +0

    這個答案的問題是place函數仍然期待我將要放置的某個DOM元素的id。在我的情況中,我沒有關於DOM元素的ID,我想要放置它()入。 – ivandov

    +1

    '#x''參數可以被任何css選擇器替換。在你的例子中,它可以是「#」+ rowID +「> td:last-child」'。 – BuffaloBuffalo

    0

    嗯,我發現兩行代碼似乎工作,但我不知道是否在數組樣式中引用NodeLists在技術上是正確的。這就是我所做的。

    dojo.place(newPmrRow, dojo.query("#pmhTable >tbody")[0]); 
    dojo.place(newPmrHiddenInput, dojo.query("#" + rowID + "> td:last-child")[0]); 
    
    相關問題