在我的 Rails 应用程序中,我拥有它,以便当您从列表中投票、订阅或取消订阅时,它将使用 pnotify 显示一个弹出窗口。
这工作正常,直到用户导航到不同的页面,现在它不再工作。仅当加载或重新加载页面时才有效。
我知道这是因为 Rails 4 应用程序中的 Turbolinks,但它似乎执行了除 pnotify 之外的所有其他 JavaScript 代码。
其他信息..
订阅/取消订阅和投票按钮具有方法 post 并远程执行,这意味着我有一个单独的文件名 subscribe.js.erb、unsubscribe.js.erb 和 vote.js.erb 来处理 javascript 的执行当用户单击按钮时编写代码。
这是我如何创建新的 pnotify 对象的示例:
new PNotify({
title: "Subscribed!",
text: "<%= @message %>",
type: 'info',
opacity: .8,
animation: {
effect_in: 'show',
effect_out: 'slide'
},
buttons: {
sticker: false
}
}).get().click(function() {
$(this).remove();
});
我还使用名为 gem 'pnotify-rails' 的 gem 进行 pnotify
最佳答案
我也遇到了同样的问题,但这是因为 PNotify 丢失了其 context ,正如您在该行中看到的那样,插件将上下文指定为 $('body'),但是当您使用 Turbolink 导航时,正文会被替换,因此上下文会丢失。
你需要做什么?
您需要在turbolink的事件“page:load”中分配上下文
$(document).on('page:load',function(){
PNotify.prototype.options.stack = {
dir1: "down",
dir2: "left",
push: "bottom",
spacing1: 25,
spacing2: 25,
context: $("body")
}
});
关于javascript - Rails Turbolinks 破坏 pnotify,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28078480/