Вот как вы могли бы сделать это, используя код магистрали Dojo (или 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, нет необходимости вызывать «unbind».
- Dojo не поддерживает настраиваемые имена для привязки к событиям на узлах DOM, поддерживаются только стандартные имена событий DOM, такие как onclick, onfocus и т. Д.
- Dojo по умолчанию не делает узел DOM, на котором была нажата ссылка «this» в обработчиках кликов, поскольку Dojo поддерживает аргумент «this» как часть их функции onclick. Вот почему evt.target используется в действии нажатия кнопки удаления.