2017-08-21 126 views
1

我在oorder中使用_form部分来创建/编辑帖子。这个表单有一个下拉菜单,用于设置发布状态,所以如果用户将状态设置为Scheduled,那么datetimepicker显示为了选择一个日期,否则这应该默认隐藏(即当状态是“草稿”或“发布时间“)。Turbolinks - 仅在预定帖子中显示datetimepicker - 默认情况下隐藏

# app/views/posts/_form.html.haml 
= simple_form_for ["admin", @post] do |f| 

    = f.input :title 

    = f.input :status, collection: ["Draft", "Published", "Scheduled"], selected: status_for(@post) 

    .published-field 
    = f.input :published_at, as: :date_time_picker 

... 

# app/helpers/posts_helper.rb 
module PostsHelper 
    def status_for(post) 
    if post.published_at? 
     if post.published_at > Time.zone.now 
     "Scheduled" 
     else 
     "Published" 
     end 
    else 
     "Draft" 
    end 
    end 
end 

# app/assets/javascripts/posts.coffee 
changeVisibility = (status) -> 
    if status == "Scheduled" 
    $(".published-field").show() 
    else 
    $(".published-field").hide() 

jQuery -> 
    changeVisibility $("#post_status :selected").text() 
    $("#post_status").on "change", (e) -> 
changeVisibility $(this).find(":selected").text() 

问题是当用户访问该页面第一次,所以status默认情况下(如预期)设置为Draft,但是的DateTimePicker可见这是不应该(remeber?这应该仅在用户选择安排帖子时才可见)。如果您在查看文件时刷新页面,则日期选择器将消失。

原来的问题也可以在这里https://gorails.com/episodes/scheduling-posts

发现这个问题可能造成的,因为turbolinks的。我也尝试使用jquery-turbolinks宝石,但没有设法解决问题。任何想法如何解决这个问题?

+0

您的代码不包含turbo链接 –

+0

大多数代码不会,因为Turbolinks会更改页面之间正常链接的行为方式。刷新然后加载“正常”。 –

回答

1

如果你想使用Turbolinks,重要的是要记住,它的工作原理是没有真正的页面加载可言,它只是一个XHR请求,然后替换在<body>之内的HTML,同时保存旧的<body>以实现后退按钮。

这意味着没有脚本将得到执行,你不会得到任何文档加载/就绪事件等$(handler)相同$.ready(handler),并且只在页面加载时运行一次“页面的文档对象模型(DOM)成为安全操纵“。

Turbolinks火灾turbolinks:loaddocument,所以使用$(document).on('turbolinks:load', handler)所有这些东西。

您还需要注意它保留了旧的<body> DOM和任何脚本所做的副本的事实,以及由此使用的任何内存以及最后一个“页面”中的任何其他JavaScript,例如超时和动画帧等继续运行。并且您在加载时使用它来实现基于CSS选择器的显示/隐藏。

这个Rails guide有更多的信息,以及Turbolinks图书馆本身。

+0

不知道如果我理解你的答案是正确的,但是你的建议是将'我在'jquery - >'中的代码放在'$(document).ready();'函数内,是否正确? – Lykos

+0

没有'$(document).ready'是'$ .ready'的另一个别名,请检查我链接的jQuery文档。如果您使用Turbolinks,在大多数情况下使用'turbolinks:load'事件,但您一定要阅读Rails指南和Turbolinks自己的文档,因为还有其他缺陷。 –

1

我不擅长咖啡脚本并向您展示JavaScript代码。

var ready = function(){ 
    changeVisibility ($("#post_status :selected").text()); 
    $("#post_status").on("change", function(e){ 
    changeVisibility $(this).find(":selected").text(); 
}); 
} 
$document.ready(ready); 
$document.on('turbolinks:load',ready); 

Gemfile中添加以下代码

gem 'turbolinks', '~>5' 
相关问题