【问题标题】: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 上,但我也无法让它工作

标签: ruby-on-rails best-in-place


【解决方案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;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-06
          • 1970-01-01
          • 2012-10-28
          • 1970-01-01
          • 1970-01-01
          • 2019-06-14
          相关资源
          最近更新 更多