0

我正在开发一个Rails 3.2.1应用程序,并希望将一些 Javascript 变量传递给 Rails 控制器。以下是更多细节:

我的 js 小提琴:http: //jsfiddle.net/PauWy/475/

什么小提琴没有显示,一个 jQuery UI 可排序的: $("#menu-items").sortable();

我想在每个项目的 ThingsController 中的 Rails 'execute' 方法中使用以下信息:

  1. 该项目是否可见(我想我应该做类似 $('#item_1).is(':visible')
  2. 显示以下哪一项 - “添加”、“减少”或都不显示
  3. 项目的 id
  4. 可排序列表中项目的顺序/位置

我的做法是将带有上述数据的 AJAX 发送到“事物/执行”操作,并以某种方式将其路由并响应到传入的 AJAX。

我模糊地知道一些零碎的东西应该是什么样子,但我很难把所有东西放在一起。真的很感激一些帮助!

4

1 回答 1

0

因此,您需要解析 HTML 以从中获取信息

例子

HTML:

<div id="my_content">
  <div id="div1" class="reduce" style="visibility: visible;"></div>
  <div id="div2" class="add" style="visibility: visible;"></div>
  <div id="div3" class="add" style="visibility: visible;"></div>
  <div id="div4" class="reduce" style="visibility: visible;"></div>

  <div id="div5" class="reduce" style="visibility: hidden;"></div>
  <div id="div6" class="add" style="visibility: hidden;"></div>
  <div id="div7" class="add" style="visibility: hidden;"></div>
  <div id="div8" class="reduce" style="visibility: hidden;"></div>
</div>

然后您可以将其解析为 JSON(使用 jQuery):

Javascript:

var parsed_data = {}
var order = 1

$('#my_content > div').each(function() {
  // Some if else
  var element_class = $(this).hasClass('reduce') ? 'reduce' : 
                    ( $(this).hasClass('add')    ? 'add' : 'unkown')

  parsed_data['data'+ order] = {
    element_id:    $(this).attr('id'),
    display_class: element_class,
    visibility:    $(this).css('visibility'),
  }

  order++
})

然后你用 AJAX 调用你的控制器:

$.ajax({
  url: "<CONTROLLER_URL>",
  type: "POST",
  dataType: 'json', // data returned, not data sent
  data: parsed_data
}).done(function(data) {
  console.log('Done')
})

红宝石控制器:

def your_controller_function
  params.each do |key, div|
    print "DIV N°#{key}"
    print "  Id #{element_id}"
    print "  Displayed class #{display_class}"
    print "  Visibility #{visibility}"
  end
end

我希望它不会太乱,它有帮助。

于 2013-07-18T19:51:41.367 回答