2

StackOverflow 上有很多关于类似主题的问题。事实上,我已经设法在我的一个控制器(它是模型的一部分)中弹出一个基本对话框。

但是,当我尝试从控制器(即不属于模型的控制器)触发 Ajax 弹出表单时,我似乎遇到了问题。

我有一个名为 main\display.html.erb 的视图。代码片段如下所示。它基本上有一组@photos,我正在部分渲染它们。

    <%= render :partial => 'photo', :collection => @photos %>

部分 main\ _photo.html.erb 看起来像这样(只是一个片段):

    <td>
        <%= photo.title %><br>
        <%= image_tag(photo.url) %><br>
        <div id='media-form' title='Add Item to Selected Trip and Trip Item' >
            <%= render :partial => 'modal', locals: {photo: photo} %>
        </div>
    </td>

我已经预料到对部分中的部分的批评(但不完全确定为什么这很糟糕)......但见鬼,它有效。

部分“照片”(上图)中的部分形式是 main\ _modal.html.erb,如下所示:

    <%= form_tag({:controller => 'media', :action => 'create'}, :method => 'post' do  %>    
        <%= label_tag(:mi_id, 'Enter Media Item ID:') %>
        <%= text_field_tag(:mi_id) %>
        <%= hidden_field_tag :url, photo.url %>
        <%= submit_tag('Add to Album')   %>
    <% end %>

我显然有一个名为“媒体”的模型,它有一个“创建”动作,而不是将照片网址添加到数据库中。

目前以上都没有任何 ajax 或 JQuery。我以前玩过它,但没有一个有效。理想情况下,我希望在部分 main\ _photo.html.erb 中有一个按钮(或链接),它将触发模态表单作为弹出窗口......模态表单将是 main\ _modal.html.erb 中的那个。然后表单将允许我将数据添加到媒体模型。添加后,弹出表单关闭并停留在原始 main\display.html.erb 页面上,该页面包含所有照片搜索结果,无需刷新页面。

我的主要困惑是:1)我应该将包含所有 jQuery 内容的 .js.erb 文件放在哪里?在views\main 文件夹或views\media 文件夹中?或者两者都不是?

2)如果我想要一个按钮(或链接)来触发弹出表单,我需要在“主”控制器中创建一个动作吗?这是我放置'format.js'代码来触发javascript的地方吗?我已经尝试过了,当我在不属于模型的控制器中使用它时,Rails 似乎在识别“format.js”时遇到了问题。

3) ':remote => true' 应该去哪里?它应该在触发表单的按钮中还是应该在表单中或两者兼而有之?

4)如果有人可以向我展示一些基本代码以在 .js.erb 文件中启动并运行基本弹出表单,那将不胜感激。

5) 更多一般性问题 - 什么时候将 javascript 放在 application.js 中是个好习惯?

我敢肯定,您可以从我的问题中看出,我并不是一个真正的编码员,也不是 ajax 世界的新手,但每个人都必须从某个地方开始,对吧?:)

4

0 回答 0