0

我已经为此苦苦挣扎了一段时间。除了一些具体的帮助外,我将不胜感激一些指示,我可以如何填补我的知识空白。顺便说一句,我是 Rails 和 Web 开发的新手。我使用 DataTables 来显示表记录,并有一些代码向我显示用户选择的行的 ID。在我的索引视图中,我想使用该行 ID 来加载该数据行的编辑视图。我的 .js 代码如下:

$(document).ready(function() {

/* Init the table */
TableTools.DEFAULTS.aButtons = [];
oTable = $("#highways").dataTable({
     sPaginationType: "full_numbers",
     bJQueryUI: true, 
     "bProcessing": true,
     "bServerSide": true,
     iDisplayLength: 25,
     sAjaxSource: $('#highways').data('source'),
     "aoColumns": [
        null,
        null,
        null,
        null,
        null
     ],
     "sDom": 'T<"clear">lfrtip',
     "oTableTools": {
       "sRowSelect": "single",
       "fnRowSelected": function ( node ) {
         var oTT = TableTools.fnGetInstance('highways');
         var aData = oTT.fnGetSelectedData();
         var n = '/highways/' + aData[0][4] + '/edit'
         alert(n);
         var jqxhr = $.get(n, function() {
          alert("success");
          })
       }
     },

});
} );

开发日志显示:

在 2012-08-21 07:57:14 +1000 开始 GET "/highways/8/edit" for 127.0.0.1 由 HighwaysController#edit as / 参数处理:{"id"=>"8"} [1m[35mHighway加载(0.3ms)[0m SELECT highways.* FROM highwaysWHERE highways. id>= 8 LIMIT 1 Highway BARKLY HIGHWAY 渲染的 Highways/_form.html.erb (67.1ms) 在 layouts/highways 内渲染的 Highways/edit.html.erb (258.5ms) 在 276ms 内完成 200 OK (Views: 274.6ms | ActiveRecord: 0.3小姐)

我在控制器代码中尝试了各种方法,在某些情况下,日志显示编辑视图已被重新渲染,但它没有显示在浏览器中。当前控制器代码:

class HighwaysController < ApplicationController
  respond_to :html, :json

def index
 #   @highways = Highway.all
 #   logger.debug "Highway Count: #{@highways.size}"
  respond_to do |format|
    format.html
    format.json { render json: HighwaysDatatable.new(view_context) }
  end

结尾

def edit # logger.debug "Edit (render :layout => false) Highway ID #{params[:id]}" @highway = Highway.find(params[:id]) logger.debug "Highway #{@highway. name}" # 渲染 response_to 做 |format| format.html format.json { 渲染 json: HighwaysDatatable.edit(view_context) } 结束

$.get 返回 JSON 吗?

我也尝试过不同的方法。我在索引视图中有一个 link_to:

 <div id ="highway_edit" >
   <% @n = 11.to_s %>
   <%= link_to "Edit 2", edit_highway_path(@n), :remote => true %>
 </div>  

这个硬编码版本有效,但我找不到从 javascript 代码中修改该链接以使其反映所选行 ID 的方法,或者调用将行 ID 返回到变量 @n 的函数。

我意识到我必须缺少一些基础知识,因此我将不胜感激一些建议的教育起点。我已经阅读了许多其他相关问题,但没有足够的知识来提取我需要的东西。

PS 我看到 DataTables 有一个编辑器功能,从长远来看,它几乎可以实现我想要实现的目标,但它还没有“准备好 Rails”。

谢谢!

编辑: 在准备这个问题时,我没有正确地将我的代码恢复到我想讨论的阶段。所以我更改了控制器代码和后续的开发日志。因此,问题不是模板错误,而是视图未呈现。

编辑 我已经解决了这个问题,现在有了结果。我在索引视图的顶部添加了一个新的 div('result' 类)并更改了我的 js 代码,如下所示:

var n = '/highways/' + aData[0][4] + '/edit'
$.get(n, function(data) {
    $('.result').html(data);

并且编辑视图呈现在该 div 中。结果很难看,因为它会将表格向下推,并使 DataTable 的页眉和页脚翻倍。但至少它呈现。我不明白为什么这两种方式都通过控制器中的 Edit 方法起作用。我现在可以处理化妆品,或者更好地让编辑视图显示为模态覆盖。

4

1 回答 1

0

我希望能够单击(或最好双击)一行并加载该行的编辑视图。我将继续寻求这样做。与此同时,我添加了一个指向视图的链接:

<div id="EditLink">
   <%= link_to "Edit Highway", :controller => :highways, :action => :edit, :id => 1 %>
</div>  

并在回调函数中有以下代码:

"oTableTools": {
                      "sRowSelect": "single",
                      "fnRowSelected": function(node) {
                        var oTT = TableTools.fnGetInstance('highways');
                        var aData = oTT.fnGetSelectedData();
                        $("div#EditLink a").attr('href','/highways/' + aData[0][4] +  '/edit')
                        }
                      },     

它根据所选行的 id 修改链接。使用这种方法,用户必须知道首先选择一行,然后单击链接。如果他们不首先选择一行,他们将转到默认值 (id = 1)。您必须确保表中存在这样的 id。

于 2013-02-28T21:45:23.230 回答