2

在我的 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 的 gem 进行 pnotify'pnotify-rails'

4

1 回答 1

3

我也遇到过同样的问题,但这是因为 PNotify 丢失了它的上下文,正如您在该行中看到的那样,插件将上下文分配为 $('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")
    }
        
});

于 2015-01-29T17:12:35.233 回答