best_in_place - verwende den aktualisierten Wert wieder im View

9

Ich habe eine Idee und ein Problem, auf das ich keine Antwort oder Lösung finden kann. Einige Informationen, falls erforderlich, später oder hilfreich:

  • Rails Version 3.2.9
  • best_in_place (git: //github.com/straydogstudio/best_in_place.git)
  • Ruby 1.9.3p327

Ok, also habe ich eine Einstellungsseite, auf der ich individuelle Einstellungen aktualisieren kann, indem ich sie unter Verwendung von best_in_place edge editiere. Funktioniert gut. Glücklich damit.

Einige der Einstellungen sind miteinander verbunden, dh ich muss sie addieren oder addieren. Als hilfreicher Tipp für den Benutzer, meiner Meinung nach, gibt es neben dem In-Place-Formular für diese Einstellungen auch einen berechneten Wert.

Nun möchte ich natürlich, dass dieser Wert zusammen mit dem Attribut selbst aktualisiert wird. Ich kann keinen Weg finden, das zu tun.

Wenn ich es mit dem: data = & gt; es funktioniert, aber ich bekomme den alten und nicht den neuen Wert, also ist meine Sicht immer "1 Schritt zurück".

Ich habe auch versucht mit update.js.erb und _test.html.erb teilweise, aber JavaScript-Datei funktioniert nicht. Es ist wie es nicht existiert. Ich habe doppelte, dreifache überprüft, wo es zu setzen und es ist OK (app / views / controller / _partial.html.erb)

Also. Ziemlich einfache Frage wäre; Wie kann ich auf einen aktualisierten Wert zugreifen und ihn verwenden, um die Berechnungen zu aktualisieren? Ich persönlich denke, ich sollte mit der partiellen und js-Datei gehen - aber ich habe keine Ahnung, warum JS-Datei nicht abgeholt wird. Irgendeine Idee dazu?

Wenn es andere Optionen gibt, würde ich den Hinweis mehr als zu schätzen wissen.

Danke!

- EDIT (Code hinzugefügt)

anzeigen:

%Vor%

settings_controller.rb:

%Vor%

update.js.erb:

%Vor%

_update.html.erb:

%Vor%

- EDIT 2:

OK, anscheinend ist es möglich, etwas so zu machen, wie ich es möchte:

%Vor%

in Kombination mit

%Vor%

& amp;

%Vor%

Aber hier endet es für mich. Ich weiß nicht, wie man Rendern verwendet: json = & gt; {"Modell" = & gt; @model} in meinem Fall, da es in Kombination mit format.json {respond_with_bip (@s)} gemacht werden muss.

Wo setze ich render in den Controller? Derzeit bekomme ich 500 interne Serverfehler, die dies als Antwort versuchen.

Ich habe diese Lösung hier gefunden.

Danke !!

    
Mitja Čebokli 08.03.2013, 13:56
quelle

3 Antworten

1

Im Ajax-Callback können Sie eine weitere Anfrage stellen, um das gewünschte Teil zu erhalten:

%Vor%

Dann rendert man in der Aktion eine JS-Datei (zB: show.js.erb), wo man das Zielelement durch die Ergebnisse des Renderns ersetzt:

%Vor%     
apeniche 11.08.2014 20:49
quelle
0

Sie können jQuery verwenden, um das dom für das Element zu analysieren, das sich am besten geändert hat, und von dort den aktualisierten Wert abrufen. Zum Beispiel, von Ihnen haben diesen Code (haml)

%Vor%

Dann würde Ihr Rückruf so aussehen (coffeescript)

%Vor%

Sie können sogar den neuen Wert mit jQuery nachschlagen. Im Kontext des Callback-Handlers repräsentiert "this" das Element, von dem aus der Aufruf erfolgte, also könnten Sie einfach

tun %Vor%

und erhalte den neuen Wert auf diese Weise zum anderen Widget. Meine Vermutung ist, dass das Ereignis, das vom Ajax-Handler zurückgegeben wird, auch currentTarget hat, was wiederum das Widget wäre, das die Ajax-Anfrage ausgelöst hat. Meine einzige Sorge bei all dem wäre, dass Ihr Erfolgs-Handler irgendwie den Best-in-Place-Handler schlägt, und Sie erhalten das Widget, bevor es aktualisiert wird. Bei meinen Tests ist das nie passiert.

    
tehfoo 02.05.2013 22:07
quelle
-1

Ich habe gerade eine Frage wie folgt beantwortet:

Hier antworten

Aber anstatt nur den Wert einzufügen, müssen Sie die benötigte Summe verwenden.

    
Bernardo Mendes 11.04.2013 17:09
quelle

Tags und Links