Rails 'Best in Place' Gem - Flash 成功消息?

Posted

技术标签:

【中文标题】Rails \'Best in Place\' Gem - Flash 成功消息?【英文标题】:Rails 'Best in Place' Gem - Flash success message?Rails 'Best in Place' Gem - Flash 成功消息? 【发布时间】:2012-05-16 10:14:45 【问题描述】:

我正在使用 best_in_place gem (https://github.com/bernat/best_in_place) 在 Rails 应用程序中进行就地编辑。我的控制器有一行:

format.json  respond_with_bip(@user) 

gem 会为任何验证错误生成 purr 通知,但我有什么办法也可以闪烁通知以表示成功更新?我似乎在文档中的任何地方都找不到这个,而 bip 使用 JSON 响应的事实使整个事情对我来说似乎是一个黑盒子。

任何帮助将不胜感激。

【问题讨论】:

是的,我也遇到了这个问题。似乎在RailsCast 和他们的Github Readme 上,但我也无法让它工作 【参考方案1】:

由于您使用 JSON 响应,因此没有 Flash 消息。 Flash 在 html 页面上(您可以使用 flash[:message] = "Success! Hooray!"),但在 JSON 请求中没有显示的地方。

【讨论】:

【参考方案2】:

这取决于您在控制器中执行的操作,但您不能有一个在更新时触发的事件以显示通知 - 例如在 ajax:success 上。

重新阅读您的问题后,我认为这实际上对您没有帮助。但请查看Flash Render Gem 以防万一。 Here's the info on how to implement宝石。

【讨论】:

【参考方案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"   

【讨论】:

【参考方案4】:

我遇到了类似的问题。我所做的是制作自己的 bip.purr.js 文件并从我的 application.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 不起作用,所以我也更改了它。如果它适合您,您应该查看original source。在制作自己的文件之前,无论如何你都应该这样做,但这就是我的样子(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;

【讨论】:

以上是关于Rails 'Best in Place' Gem - Flash 成功消息?的主要内容,如果未能解决你的问题,请参考以下文章

Rails 4 - best_in_place gem 和多对多关联

使用 Rails gem 'best_in_place' 进行内联编辑 - 错误:在 textarea 上编辑后新行丢失

在单击标签名称时 Rails best_in_place gem

使用 Rails、jquery 和 best_in_place gem 就地编辑

Rails best_in_place gem 输入有讨厌的额外空间

Rails 4 的 best_in_place gem 复选框问题(为啥字符串没有转换为布尔值?)