2015-01-21 3 views
2

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

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

Я знаю, что это связано с тем, что turbolinks в приложении с рельсами 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 под названием гем 'pnotify-rails'

ответ

2

У меня были те же проблемы, но происходит потому, что PNotify теряет свой context, так как вы можете видеть в этой строке плагин, назначающий контекст как $ ('body'), но когда вы перемещаетесь с использованием turbolink, тело заменяется, поэтому контекст теряется.

Что вам нужно сделать?

Вам нужно назначить контекст в turbolink событие 'страницы: LOAD'

$(document).on('page:load',function(){ 
 
\t PNotify.prototype.options.stack = { 
 
\t \t dir1: "down", 
 
\t \t dir2: "left", 
 
\t \t push: "bottom", 
 
\t \t spacing1: 25, 
 
\t \t spacing2: 25, 
 
\t \t context: $("body") 
 
    } 
 
     
 
});

Смежные вопросы