9
votes

best_in_place - Utilisez la valeur mise à jour à la vue

J'ai une idée et un problème que je ne peux pas sembler trouver une réponse ou une solution. Quelques informations si nécessaire ultérieurement ou utiles:

  • Rails Version 3.2.9 Li>
  • best_in_place (git: //github.com/straydogstudio/best_in_place.git) Li>
  • Ruby 1.9.3P327 Li> ul>

    OK, j'ai donc une page de paramètres où je peux mettre à jour les paramètres individuels en les modifiant avec l'utilisation de best_in_place Gem. Fonctionne bien. Heureux avec ça. P>

    Certains paramètres sont interconnectés, ce qui signifie que je dois les résumer ou les soustraire. En tant que pointe utile pour l'utilisateur, à mon avis, juste à côté de la forme en place pour ces paramètres, il existe également une valeur calculée. P>

    Maintenant, bien sûr, je voudrais voir cette valeur être mise à jour avec l'attribut lui-même. Je ne trouve pas un moyen de faire ça. P>

    Si je le fais avec le: Data => Ça fonctionne, mais je reçois l'ancien et non la nouvelle valeur, alors ma vue est toujours "1 étape Derrière ". P>

    J'ai également essayé avec update.js.erb et _test.html.erb partiel, mais JavaScript ne fonctionne pas. C'est comme ça n'existe pas. J'ai le double, triple vérifié où le mettre et c'est ok (app / vues / contrôleur / _partial.html.erb) p>

    donc. Une question assez simple serait; Comment puis-je accéder à une valeur mise à jour et l'utiliser dans la vue pour mettre à jour les calculs. Personnellement pense que je devrais aller avec le fichier partiel et JS - mais je n'ai aucune idée de la raison pour laquelle le fichier JS n'est pas ramassé. N'importe quelle idée à ce sujet? P>

    S'il y a d'autres options, je serais plus que d'apprécier l'indice. P>

    merci! P>

    - modifier (code ajouté) P>

    Affichage: p> xxx pré>

    paramètres_controller.rb: p> xxx pré>

    update.js.erb:

    "ajax:success", function(event, data) {
    var result = $.parseJSON(data);
    // from here the result var will be accessible with all the data returned by the controller.
    // result.model is your object - use result.model.attribute  to get specific values...
    }
    


2 commentaires

Vous devez afficher votre code (HTML / JS et contrôleur). Sans cela, nous ne pouvons que faire des suppositions. Peut-être qu'il y a une erreur dans votre code JS qui vous fait penser que votre fichier n'est pas ramassé.


Ok, j'ai ajouté le code concerné. THX


3 Réponses :



0
votes

Vous pouvez utiliser JQuery pour analyser le DOM de l'élément le mieux changé et obtenez la valeur mise à jour de là. Par exemple, de vous avez ce code (haml) xxx

alors votre rappel ressemblerait à ceci (Coffeescript) xxx

vous pouvez même Passer à la recherche de la nouvelle valeur avec jQuery. Dans le contexte du gestionnaire de rappel, "ceci" représente l'élément que l'appel a été fait de sorte que vous puissiez simplement faire xxx

et obtenir la nouvelle valeur à l'autre widget qui manière. Je suppose que l'événement renvoyé par le gestionnaire AJAX a également CurrentTarget, qui serait à nouveau le widget qui a trigué la demande Ajax. Mon seul souci de tout ce que ce serait que votre gestionnaire de réussite bat de la meilleure façon du gestionnaire de places et que vous obtenez le widget avant qu'il ne soit mis à jour. Dans mes tests qui ne sont jamais arrivés.


0 commentaires

1
votes

Dans le rappel AJAX, vous pouvez faire une autre demande pour obtenir le partial que vous souhaitez:

$("#div-<%= @div.id %>").replaceWith("<%= escape_javascript(render(partial: 'some/partial', :layout => false)) %>");


0 commentaires