:remote => true 和 url_for,如何做到这一点?

2023-11-30

我正在尝试使整个 div 标签可点击。我尝试使用的代码如下,当我添加

:remote => true

它会抛出 Too much args 错误,2 for 1。

Code:

<div id="foo" onclick="window.location = '<%= url_for foo_controller_path(:someparam => @left), :remote => true %>'"></div>

url_for 不接受:remote => true争论,通常是link_to您将其发送到的方法。

你有什么理由不能让你的<div>而是一个链接?出于所有意图和目的,它充当链接,因此您应该将其标记为这样,我们称之为语义标记。

如果你真的想这样做,最好使用 jquery(或原型,如果这是你喜欢的)来不引人注目地执行操作......它也使执行 ajax 请求变得更容易。单击链接后,您是否尝试更新页面上的某些内容,或者什么都不做?

'window.location' 也是telling要重定向的页面上的 javascript。如果您想远程发出请求,您就不会使用它。

使用 jquery 你could如果你想坚持使用 div 就这样做

%(function(){
  $('#foo').click(function(){
    $.get(
      url: $(this).data('request-path'),
      success: function(data){
        alert('success sir!  controller responded with ' + data);
      }
    );
  });
});

并在您的视图中使用它:

<div id='foo' data-request-path='<%= url_for foo_controller_path(:someparam => @left) %>'></div>

但如果你将其更改为链接标签,你可以这样做......

= link_to("", url_for(foo_controller_path(:someparam => @left)), :remote => true, :id => 'foo')

它应该可以工作。然后,您可以按照您尝试设置 div 标签样式的方式设置此链接的样式。

这是更多的语义和更少的代码让你担心。如果您之后需要更新 dom 中的某些内容,您可以添加此 jquery (如果您使用的是 jquery 和 Rails3):

$('#foo').bind('ajax:success', function(data){
  alert('successful request!  data was:  ' + data);
});

我不一定测试all但这应该是一个很好的起点...我不太喜欢将 onclick 处理程序放入标签中。当您使用 jquery 绑定事件时,它往往会工作得更好。

如果您希望能够执行我所描述的操作,但您使用的是 Rails 2,则可以从此处获取 Rails3 jquery 脚本:https://github.com/rails/jquery-ujs

请注意,如果您使用 Rails 3 并且想要 jquery 而不是原型(像我一样!),您还需要该脚本。默认情况下,Rails 3.1 将与 jquery 捆绑在一起,而不是我听说的原型。

并改变:remote => true在那个 url_for 中"data-remote" => true(对于rails 2,对于rails 3,您可以使用符号语法,它使得'data-remote'给你的属性。

如果有些事情不太有效或者您需要澄清,请告诉我。或者即使你完全讨厌我的想法:p

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

:remote => true 和 url_for,如何做到这一点? 的相关文章

随机推荐