Frage

Es tut uns Leid, aber anscheinend verstehe ich nicht genug, um herauszufinden, dieses Problem ...

Verkettungs

Ich bin die Umsetzung einer jQuery-Karussell-Plugin (jCarouselLite) und ich versuche, eine Option ‚entfernen‘ eines der Karussell Artikel (derzeit <div class="remove">) ...

hinzufügen
initEvents: function() {
        var self = this;
        // Bind jQuery event for REMOVE button click
        $('.remove').live('click', function() {     
            // Need to save the ID that we're removing
            var item = $(this).closest('li.sort');
            var itemId = item.attr("id");

            $(this).removeItem();

            self.refreshDisplay(itemId);
        }); 


 $.fn.removeItem = (function() {
  var item = this.closest('li.sort'); // could save this call by passing param

  item.fadeOut("normal", function() {
         $(this).remove();
      });

   // preserve jQuery chain
   return this;
 });
},

refreshDisplay(itemId) {
  // ...
  // redraws carousel
  // ...
  // itemId is used to remove from the array of Items to show (class-wide scope)
}

Da gibt es keine saubere Art und Weise zu ‚Refresh‘ der jCarouselLite Plugin (vielleicht etwas, das ich versuche es später in der eigentlichen Plugin Implementierung) die schnelle und schmutzige Lösung für diese ist nur das Karussell zu regenerieren.

Das Problem ist, ich versuche das Element geklickt auszublenden, jedoch scheint es, wie der refreshDisplay () vor der Animation der Ausblendung genannt wird (und Entfernen) der klickten Punkt abgeschlossen ist. Ich habe dies bestätigt durch die self.refreshDisplay(itemId); Linie zu kommentieren und sie ausblendet und entfernt wie erwartet.

Also ich denke, es gibt eine gewisse Art und Weise ich Kette brauchen diese? Ich habe ein paar Stunden des Lesens, wie Verkettungs Arbeiten gemacht und ich dachte, dass ich es verstanden, aber anscheinend nicht.

Jede und alle Hilfe ist willkommen, danke!

War es hilfreich?

Lösung

Der Zweck der Verkettung ist, mehr Befehle zu ermöglichen, ein Basisobjekt zu teilen, aber es funktioniert nicht Ursache jeden Befehl für die vorherigen warten.

Dafür benötigen Sie einen Rückruf verwenden. So etwas wie

initEvents: function() {
        var self = this;
        // Bind jQuery event for REMOVE button click
        $('.remove').live('click', function() {     
            // Need to save the ID that we're removing
            var item = $(this).closest('li.sort');
            var itemId = item.attr("id");

            $(this).removeItem(function() {
                self.refreshDisplay(itemId);
            });
        }); 


 $.fn.removeItem = (function(callback) {
  var item = this.closest('li.sort'); // could save this call by passing param

  item.fadeOut("normal", function() {
         $(this).remove();
         callback();  //now your refresh is being called after the fade.
      });

   // preserve jQuery chain
   return this;
 });
},
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top