禁用link_to链接无效但隐藏link_to工作

时间:2015-11-20 07:14:05

标签: ruby-on-rails-4.1 ruby-2.1

link_to方法未被禁用: -

<%= link_to edit_cabinet_path(object), remote: true, disabled: true do %>
      <span class="glyphicon glyphicon-pencil"></span>
<% end %>  

但如果我喜欢下面隐藏链接

<%= link_to edit_cabinet_path(object), remote: true, style: "display:none;" do %>
      <span class="glyphicon glyphicon-pencil"></span>
<% end %>  

现在的问题是如何使用块禁用这种类型的链接,以及第二个代码工作的原因是什么,首先不是。

4 个答案:

答案 0 :(得分:8)

可能您正在寻找link_to_iflink_to_if仅在条件通过时才会使您的链接可以点击。

您的代码应该是:

<%= link_to_if false, edit_cabinet_path(object), remote: true do %>
      <span class="glyphicon glyphicon-pencil"></span>
<% end %> 

要使其动态化,您可以调用满足是否激活该链接的条件,例如:

<%= link_to_if cabinate.active?, 
               "<span class='glyphicon glyphicon-pencil'></span>".html_safe, 
               edit_cabinet_path(object), remote: true %>

希望这能回答你的问题..

答案 1 :(得分:1)

实际上disabled没有link_to属性,仅适用于button_to代码。

有关详细信息,请参阅此处:http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to

在这种情况下,您可能希望使用link_to_if,请查看以下内容:http://apidock.com/rails/v4.2.1/ActionView/Helpers/UrlHelper/link_to_if

答案 2 :(得分:1)

我写了一些简单的 JS 来让你将 disabled: true 添加到 link_to 方法

  //this allows us to use html disabled attribute in rails
  //to prevent clicking on a disabled link from doing anything
  $('a[disabled]').click(function(e){
    e.stopImmediatePropagation()
    e.preventDefault();
  });

答案 3 :(得分:0)

link_to_if无法正常工作。仅当您的条件为false时才呈现给定的块作为后备。
https://apidock.com/rails/ActionView/Helpers/UrlHelper/link_to_if#1589-Passing-a-block-does-not-behave-as-expected

就我而言,我为给定的区块制作了一个程序

    seenListener = sender.addValueEventListener(object : ValueEventListener{
        override fun onDataChange(dataSnapShot: DataSnapshot) {
            for(snapShot in dataSnapShot.children){
                var chat = snapShot.getValue(Chat::class.java)

                if(!chat?.isYourSend!!) {
                    if (chat?.receiver.equals(userId) && chat?.sender.equals(firebaseUser.uid)) {
                        var hashMap: HashMap<String, Object> = HashMap()
                        hashMap.put("seen", true as Object)
                        snapShot.ref.updateChildren(hashMap as Map<String, Any>)

                        receiver.child(snapShot.key!!).updateChildren(hashMap as Map<String, Any>)
                    }
                }

            }
        }

        override fun onCancelled(p0: DatabaseError) {

        }
    })