2010-09-11 2 views
0

Поток для моего приложения, для не logined пользователей, выглядит следующим образом:Сохранение произвольное действие, которое будет выполняться после завершения действия

1) non-logined user does a given action that requires login (arbitrary) 
2) dialog appears for non-logined user and he logins without any refreshing of the page 
3) collecting of additional information if it is new user 
3) the given action should be executed 

Как я могу это сделать? Я считаю, что это можно сделать с тщательно структурированными обратными вызовами. Часть сложной части состоит в том, что существует ряд возможных действий.

ответ

1

магазин действие в качестве обратного вызова в переменной:

var callback = function() { alert ("You are logged in."); }; 

Когда не протоколированием пользователь пытается выполнить это действие, нажав на кнопку, или любой другой, приложение должно передать функцию обратного вызова в качестве аргумента для функции входа, как это:

show_login_form(callback); 

... где callback является то, что будет выполняться на удачном входе в систему. Собираем все вместе:

var callback = function() { alert ("You are logged in."); }; 
    if (loggedIn) 
     callback(); 
    else 
     show_login_form(callback); 

Просто убедитесь, что вы делаете какие-то проверки на стороне сервера, так как мой пример является упрощенным и легко взломан.

+0

Спасибо! Общая идея работает. Я реализовал его, так, как я исполнил событие click, кажется хакерским - можете ли вы посмотреть здесь? http://stackoverflow.com/questions/3692288/elegantly-passing-an-click-event-through-multiple-callbacks –

1

Вы отметили рубиновые рельсы, поэтому я предполагаю, что это будет приложение для рельсов. Планируете ли вы реализовать свою собственную систему аутентификации и входа в систему или собираетесь использовать gem/plugin. Я спрашиваю, потому что я бы не подумал, что диапазон действий будет сложной частью, если все действия были определены в контроллере /. Например, с добавлением devise:

before_filter :authenticate_user! 

в контроллере гарантировало бы, что все действия будут требовать входа в систему. Это может быть дополнительно уточнены с помощью: кроме как

before_filter :authenticate_user!, :except => [:index, :show] 

Имея это в виду, мы только действительно нужно думать о АЯКС частей. Вы могли бы, возможно, добиться этого с помощью шаблонов js.erb и использование respond_to в методе, например

def log_in 
    respond_to do |f| 
    # gracefully fallback! 
    f.html { redirect_to new_user_session_path } 
    # or do something snazy.. 
    f.js 
    end 
end 

Твердая часть может фактически получать журнал АЯКС в части работы, но, надеюсь, что я сказал, может помочь мыслительный процесс.

Райан Бейтс сделал хороший скринкаст на JQuery с Rails, но я не могу разместить ссылку ...

+0

Вот ссылка http://railscasts.com/episodes/136-jquery –

+0

Спасибо Бен! Хорошие идеи, я пытаюсь сделать все в javascript и минимизировать логику на стороне сервера. мое решение находится здесь: http://stackoverflow.com/questions/3692288/elegantly-passing-an-click-event-through-multiple-callbacks –

1

Постарайтесь смотреть на taconite plugin для JQuery. Был поток на этом и Ruby, но он, похоже, исчез, кроме Google's cache.

+0

спасибо peter! Это звучит здорово, но для меня это слишком тяжело. Я реализовал решение таким образом: http://stackoverflow.com/questions/3692288/elegantly-passing-an-click-event-through-multiple-callbacks –

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