Рельсы турболинки ломают pnotify

В моем приложении rails у меня есть это так, что когда вы голосуете, подписываетесь или отказываетесь от подписки из списка, оно показывало всплывающее окно с использованием pnotify.

Это работает нормально, пока пользователь не перейдет на другую страницу, а теперь она больше не работает. Это работает только при загрузке или перезагрузке страницы.

Я знаю, что это связано с тем, что turbolinks в приложении rails 4, но, похоже, он выполняет весь мой другой код javascript, кроме pnotify.

Дополнительная информация..

Кнопки подписки / отказа от подписки и голосования имеют сообщение метода и выполняются удаленно, что означает, что у меня есть отдельные имена файлов 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();
        });

Я также использую гем для pnotify под названием gem 'pnotify-rails'


person Shems Eddine    schedule 21.01.2015    source источник


Ответы (1)


У меня были те же проблемы, но это происходит из-за того, что 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")
    }
        
});

person Caleb    schedule 29.01.2015