Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用Ajax更新页面内容的高级设计_Ruby On Rails - Fatal编程技术网

Ruby on rails 使用Ajax更新页面内容的高级设计

Ruby on rails 使用Ajax更新页面内容的高级设计,ruby-on-rails,Ruby On Rails,我在下图中看到的ul和li元素中有一个侧栏。 右边有三张图表。 每个图表都有自己的RESTWeb服务来更新其数据。 当我点击侧栏上的项目时,我想更新这些图表。(通过Ajax调用) 这方面的高级设计是什么?例如,我是否需要在我的li元素上将链接到?放什么进去?如何传递参数?怎么打电话?有什么能让生活更轻松的宝石吗 一些高级甚至低级的设计很受欢迎,所以我知道从哪里开始。这更多的是AJAX问题,而不是rails问题 您需要在li上添加单击处理程序(jQuery可能是最简单的方法),并让它们向您的RE

我在下图中看到的
ul
li
元素中有一个侧栏。 右边有三张图表。 每个图表都有自己的RESTWeb服务来更新其数据。 当我点击侧栏上的项目时,我想更新这些图表。(通过Ajax调用)

这方面的高级设计是什么?例如,我是否需要在我的
li
元素上将
链接到
?放什么进去?如何传递参数?怎么打电话?有什么能让生活更轻松的宝石吗


一些高级甚至低级的设计很受欢迎,所以我知道从哪里开始。

这更多的是AJAX问题,而不是rails问题

您需要在
li
上添加单击处理程序(jQuery可能是最简单的方法),并让它们向您的REST端点发送一个AJAX请求以获取图表。根据您的设置,我建议让这些端点以JSON格式返回您要查找的数据,然后更新图表中的值(可能会发疯并使用d3js绘制它们)

我猜REST端点需要一个
医生id
或其他东西才能返回正确的数据,您需要从某处获取这些数据。我通常只是在元素上添加id作为数据属性

    <li class="js-physician" data-id="<%= physician.id %>">Physician X</li>

因此,您所要做的就是设置回调处理程序,确保发送的数据正确。

太好了,谢谢。我有一个整体的想法。是的,我使用D3.js制作图表,是的,服务返回JSON。现在希望我最后的困惑是如何将用户以某种方式选择的值传递给应用程序的“控制器”部分?或者我不需要它,因为它们是通过Ajax更新的。我也在Google上看到了一些宝石,比如pjax rails或rack Ajax等等!对于像我这样的初学者来说,这些事情会使它变得更复杂吗?我上面所做的方式将
医生id
发送到控制器,您可以作为参数[:医生id]访问该控制器。params散列在每个控制器操作中都可用,它包括通过GET或POST方法发送的params。我猜他们根本不了解你的应用程序,只是点击他们感兴趣的
  • 包含将通过AJAX发送的数据(医生id
    )。根据li是否“活动”(活动是您定义的内容),您可以创建一个事件来添加和删除li中的数据。此外,我建议只使用javascript,跳过使用这些gem。我对他们不熟悉,但你要做的任务不是很难。只需发出ajax请求,然后解析返回的数据。“data-id”将其标识为HTML5数据属性。使用“数据-”前缀表示类似的信息。如果需要,可以使用“id”,但这表明它在标记中有不同的用途。它只是语义,所以不会改变任何东西,您只需更新
    e.target.getAttribute()
        $(document).on('click', '.js-physician', function(e) {
          var physician_id = e.target.getAttribute('data-id');
          params = { // this is your AJAX object
            type: 'GET',
            url: '/some_rest_url?physician_id=' + physician_id,
            success: function(data) {
              // update the charts with the returned data
            },
            error: function(jqXHR, textStatus, errorThrown) {
              // handle error
            }
          };
          $.ajax(params);
        });