конвертировать код из jquery в прототип или додзё - PullRequest
1 голос
/ 25 июня 2009

Если бы вам пришлось сделать это ...

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, как бы вы это сделали?

Ответы [ 2 ]

4 голосов
/ 27 июня 2009

Вот как вы могли бы сделать это, используя код магистрали 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 используется в действии нажатия кнопки удаления.
0 голосов
/ 25 июня 2009

Ну, потому что в вашем коде нет событий ... или AJAX.

Просто глупая просьба о неправильном употреблении.

...