2016-03-22 8 views
0

Jetzt habe ich zwei Schaltflächen, die es mir ermöglicht, einen Benutzer zu folgen oder nicht zu folgen, indem Sie auf meine Follower-Liste. Wenn zum Beispiel jemand bereits in meinen Followern ist, erscheint die Schaltfläche "Nicht mehr anzeigen", in anderen Fällen erscheint die Schaltfläche "Folge".Ersetzen einer Schaltfläche durch eine andere mit ReplaceWith()

followProfile: function (e) { 
    var personalData = $('#personal-information').serializeObject(); 
    var postParams = { 
     csrfmiddlewaretoken: $.cookie('csrftoken'), 
     personal_data: JSON.stringify(personalData) 
    }; 

    $.post('/follow/', postParams, function(resp) { 
     $(".follow-button").replaceWith($(".unfollow-button").show()); 
    }) 
}, 
unfollowProfile: function (e) { 
    var personalData = $('#personal-information').serializeObject(); 
    var postParams = { 
     csrfmiddlewaretoken: $.cookie('csrftoken'), 
     personal_data: JSON.stringify(personalData) 
    }; 

    $.post('/unfollow/', postParams, function(resp) { 
     $(".unfollow-button").replaceWith($(".follow-button").show()); 
    }) 
}, 

Hier ist es mein Problem; Wenn ich klicke, um jemandem zu folgen, ändert sich die Schaltfläche und es wird nicht mehr angezeigt. Wenn ich jedoch noch einmal auf "unfollow" klicke, wird die Schaltfläche ausgeblendet. Ich bin neu in Javascript und Backbone.js, also habe ich diese Methode noch nie zuvor benutzt. Kannst du mir sagen, warum der Knopf verschwindet? Was ist hier falsch?

Erläuterung: Wenn ich "unfollow" anrufe, ersetzt es unfollow, um korrekt zu folgen (jetzt folgt es). Aber wenn ich jetzt folge, verschwindet anstelle des "unfollow" Knopfes.

Antwort

1

Sie rufen die Methode .show() auf, die keine JQueryObject zurückgibt, die die .replaceWith() Funktion erwartet.

$.post('/unfollow/', postParams, function(resp) { 
    var followButton = $(".follow-button"); 
    $(".unfollow-button").replaceWith(followButton); 
    followButton.show(); 
}) 
+0

Oh, ich sehe deinen Punkt richtig, aber wenn ich .show(); schreibe, verschwindet es immer noch:/Ich bearbeite die Frage. Vielen Dank für Ihre Antwort und Korrektur. – waterkinq

+0

Ich habe meine Antwort bearbeitet. Sehen Sie, ob das hilft. – cani

+0

Es gibt das gleiche Ergebnis. Zuerst ändert es sich, bis zum unfollow Knopf richtig, aber wieder kann ich nicht unfollow ändern, um zurück zu folgen. Ich denke, dass die Funktion replaceWith() überschreibt. Ich meine, wenn "follow" zu "unfollow" macht, gibt es keine Möglichkeit, "unfollow" zu "follow" zu ändern. – waterkinq

0

Ich löste es, indem ich einfach verwendete;

$.post('/unfollow/', postParams, function(resp) { 
    document.getElementById('twitter-follow-button').style.display = 'inline'; 
    document.getElementById('twitter-unfollow-button').style.display = 'none'; 

}) 
$.post('/follow/', postParams, function(resp) { 
    document.getElementById('twitter-follow-button').style.display = 'none'; 
    document.getElementById('twitter-unfollow-button').style.display = 'inline'; 

}) 

Ich brauche die Tasten zu bewahren, also denke ich, das ist die einfachere und bessere Lösung für mich. replaceWith(), soweit ich es verstehe, behält die Schaltfläche nicht bei.

Vielen Dank.

+0

'document.getElementById ('twitter-follow-button') '... im Idealfall wird 'id' im Dokument eindeutig sein, aber globale Selektoren wie dieses in einem Backbone-Projekt zu verwenden, ist eine schlechte Übung. –

Verwandte Themen