按需模态渲染?

时间:2012-05-31 14:14:32

标签: jquery ruby-on-rails ruby-on-rails-3

正如我目前所理解的那样,jquery模式在页面加载期间呈现,并由用户通过hidden = true to hidden = false值触发。

这一切都很好,花花公子,并且每当模态保持在每页最小值时效果很好。但是,这是我的问题,如果你有一个完整的模态列表,当你点击它时会弹出一个信息模式进行编辑。比如说,一个文档网格,你希望点击一个文档并弹出一个模态,只需编辑小文档。在页面加载期间不会渲染所有这些文档会降低用户体验。有没有办法加载和“按需”渲染该模态。

这种行为的标准做法是什么。

我知道rails的方法是为每个文档加载一个新页面,但我很好奇我能看到如何使这个工作。

我也标记了jQuery人群,因为这个库是我最熟悉的。

2 个答案:

答案 0 :(得分:1)

我在我的应用中做了很多。这是我的某个应用中的反馈按钮的代码。

它创建对话框,当按下按钮时,会动态加载对话框的内容。

$(function () {
    var button= $("#FeedbackButton");
    if (button.length == 0)
        button= $("<div id='FeedbackButton'>Feedback</div>").hide().appendTo("body");


    var dialog = $("#FeedbackDialog");
    if (dialog.length == 0)
        dialog = $("<div id='FeedbackDialog'>Feedback</div>").hide().appendTo("body");

    button.click(function () {
        button.hide();
        dialog.load("_FeedbackDialog.htm");
        $(dialog).dialog({
            title: "Feedback",
            modal: true,
            width: 800,
            height: 300,
            close: function () {
                $(button).show();
            }
        });
    });
});

答案 1 :(得分:1)

通过按需渲染模态,我假设您的意思是响应AJAX查询。在这种情况下,是的,有一种方法可以按需建立模态。您需要做的是设置一个事件监听器,对您的控制器进行AJAX调用。

# my_view.html
/* inside JS event trigger */
$.get("/get_modal.js")

然后在您的控制器中,响应该AJAX呼叫。

# my_controller.rb
def get_modal
  respond_to do |format|
    format.js # this will execute get_modal.js (or get_modal.js.erb)
  end
end

你的“视图”,但不是HTML,它将是JS,让你自由地做任何想做的事。

# get_modal.js
/* JS modal code */