4

Rails アプリでのインプレース編集に best_in_place ジェム (https://github.com/bernat/best_in_place) を使用しています。私のコントローラーには次の行があります:

format.json { respond_with_bip(@user) }

gem は検証エラーが発生した場合にゴロゴロ通知を生成しますが、更新が成功した場合に通知をフラッシュする方法はありますか? ドキュメントのどこにもこれが見つからないようです.bipがJSONで応答するという事実は、全体が非常にブラックボックスに見えるようにします.

どんな助けでも大歓迎です。

4

4 に答える 4

3
$('.best_in_place').best_in_place().bind('ajax:success', function(evt, data, status, xhr) {
       console.dir(evt);
       console.dir(data);
       console.dir(status);
       console.dir(xhr);
     // Use them how ever you need eg $("#yourdiv").text(data["message"]);
}); 

コントローラーで

format.json { render :json => { :message => "Successfully Saved your Model" } } 
于 2013-02-12T09:35:38.913 に答える
1

同様の問題に遭遇しました。私がしたことは、独自のファイルを作成し、application.js ファイルから requirebip.purr.jsを削除することでした。best_in_place.purr

//application.js
//= require jquery
//= require best_in_place
//= require jquery_ujs
//= require best_in_place.jquery-ui
//= require jquery.purr
//REMOVED / COMMENTED OUT THE NEXT LINE:
// require best_in_place.purr
// ADDED THIS LINE:
//= require bip.purr
//= require turbolinks
//= require bootstrap-sprockets
//= require_tree .

「エラー」機能 OOB が機能していなかったので、それも変更しました。問題が解決しない場合は、元のソースを参照してください。とにかく、独自のファイルを作成する前にそれを行う必要がありますが、これは私のものです (assets/javascripts/bp.purr.js):

/*
 * BestInPlace 3.0.0.alpha (2014)
 *
 * Depends:
 *  best_in_place.js
 *  jquery.purr.js
 */
/*global BestInPlaceEditor */

BestInPlaceEditor.defaults.purrErrorContainer = "<span class='bip-flash-error'></span>";
BestInPlaceEditor.defaults.purrSuccessContainer = "<span class='bip-flash-success'></span>";

//edited this binding to stop showing 'Error Object object'
jQuery(document).on('best_in_place:error', function (event, request, error) {
    'use strict';
    // Display all error messages from server side validation
    var errors_string = "";
    jQuery.each(jQuery.parseJSON(request.responseText), function (index, value) {
        if (typeof value === "object") {
            $.each(value, function (i, v) {
                errors_string += i[0].toUpperCase() + i.slice(1) + " " + v + ". ";
            });
        } else {
            errors_string = value;
        }
        var container = jQuery(BestInPlaceEditor.defaults.purrErrorContainer).html(errors_string);
        container.purr();
    });
});

//added this binding for success messages:
jQuery(document).on('best_in_place:success', function (event, request, error) {
    'use strict';
    // Display all success messages from server side validation
    var msg = "Updated Successfully";
    var container = jQuery(BestInPlaceEditor.defaults.purrSuccessContainer).html(msg);
    container.purr();
});

そして、ちょっとした楽しみとして、見た目を変えるための基本的な SCSS をいくつか示します。

// for best in place / purr styling
.purr {
  position: fixed;
  top: 60px;
  right: 100px;
  width: 500px;
  padding: 20px;
  &.bip-flash-error {
    background-color: red;
  }
  &.bip-flash-success {
    background-color: green;
  }
  border: solid 1px #dadada;
  border-radius: 6px;
  -moz-border-radius: 6px;
  -webkit-border-radius: 6px;
  -webkit-box-shadow: 4px 4px 15px 0px rgba(0, 0, 0, 0.75);
  -moz-box-shadow: 4px 4px 15px 0px rgba(0, 0, 0, 0.75);
  box-shadow: 4px 4px 15px 0px rgba(0, 0, 0, 0.75);
  &:first-letter {
    text-transform: uppercase
  }
;
  font-size: 20px;
  color: white;
  font-weight: bolder;
  text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;
}
于 2015-08-19T13:09:49.650 に答える
0

JSON で応答しているため、フラッシュ メッセージはありません。フラッシュは HTML ページ上にあります (ユーザーが使用できますflash[:message] = "Success! Hooray!") が、JSON 要求で表示する場所がありません。

于 2012-05-07T23:43:10.120 に答える