2009-06-25 59 views
1

如果你不得不這樣做......轉換代碼原型或道場

function addRemoveItemNS() { 
    var $newLi = $('<li class="special">special and new <button class="addone">I am new</button> <button class="removeme">remove me</button></li>'); 
$('#list9 li.special') 
    .find('button.addone') 
.unbind('click.addit') 
.bind('click.addit', function() { 
    $(this).parent().after($newLi); 
    addRemoveItemNS(); 
    }) 
    .end() 
    .find('button.removeme') 
    .unbind('click.removeit') 
    .bind('click.removeit', function() { 
$(this).parent().remove(); 
    }); 
} 
$(document).ready(function() { 
    addRemoveItemNS(); 
}); 

...與原型或道場,而不是jQuery的,你會怎麼做呢?

+1

您可能想要編輯此內容 - 您的標題不能以任何方式反映您的問題的內容 – 2009-06-25 04:22:55

回答

4

這裏是你如何能使用Dojo主幹代碼做(或1.4道場一旦被釋放)。中繼代碼添加了對end()的支持,以更好地匹配您的原始代碼。您可以通過將dojo.query(插入)保存爲變量並在兩個單獨的語句中調用.query()來獲得相同的效果來解決此問題,然後您可以使用Dojo 1.3。

function addRemoveItemNS() { 
    var html = '<li class="special">special and new <button class="addone">I am new</button> <button class="removeme">remove me</button></li>'; 
    var inserted = dojo.place(html, "list9"); 
    dojo.query(inserted) 
    .query('button.addone') 
     .onclick(function(evt){ 
     addRemoveItemNS() 
     }) 
    .end() 
    .query('button.removeme') 
     .onclick(function(evt){ 
     //Use normal DOM API for parentNode to get reference. 
     dojo.destroy(evt.target.parentNode); 
     }); 
} 

dojo.addOnLoad(function(){ 
    //First create #list9 node? Missing from original code. 
    dojo.place('<ul id="list9"></ul>', dojo.body()); 
    addRemoveItemNS(); 
}); 

關於代碼的一些注意事項:

  • 通過使用HTML字符串,然後dojo.placing它,那麼就沒有必要呼籲的「取消綁定」。
  • Dojo不支持綁定到DOM節點上的事件的自定義名稱,只支持標準DOM事件名稱,如onclick,onfocus等。
  • 道場默認情況下不會作出這樣的被點擊的點擊處理程序「this」引用的DOM節點,因爲道場支持「這個」的說法作爲自己的onclick功能的一部分。這就是evt.target用於刪除按鈕單擊操作的原因。
0

嗯,因爲你的代碼中沒有事件......或AJAX。

只是一個愚蠢的要求誤用。