2013-11-15 3 views
0

В моем приложении у меня есть кнопка, которая откроется всплывающее окно после нажатия, в моей application_controller, кнопка определяют как это,жесткий код Javascript в рельсах application_controller

{:text => 'Info', :path => Proc.new{ |x| info}, 
    :html => { :id => 'info' }}  

и и в application_helper У меня есть функция который превратит этот хэш в кнопку. Я определяю информацию, которую вы видите в Proc в application_controller, как показано ниже:

def self.info 

if some_conditions 
    "javascript: popUpInfoCenter('an_url'); return false;" 
else 
    "javascript: popUpInfoCenter('other_url');return false;" 
end 

конца

проблема у меня после нажатия на кнопке, откроются новое всплывающее окно, которое является поведением желания. Однако страница, содержащая эту кнопку, будет отображаться как пустая страница со словом «false». Я хочу, чтобы страница оставалась там, где была раньше, после нажатия кнопки. Я пытаюсь использовать:

view_context.link_to_function "javascript: popUpInfoCenter('an_url'); return false;" 

Но как view_context и link_to_function оба умирают в рельсе 3.2.14. Поэтому, если вы думаете, что есть лучший способ сделать это, пожалуйста, покажите мне.

P.S: Это все файлы, которые я могу изменить.

+0

Что делает HTML в DOM выглядеть для кнопки? – CDub

ответ

0

Суть в том, что жесткое кодирование JS в контроллер Rails идет против convention, и если вы хотите, чтобы ваш код для эффективной работы, вы должны убедиться, что вы только развернуть каждый файл, чтобы делать то, что ему нужно


Ajax

судя по ней, я думаю, вы должны смотреть на Ajax

Ajax в основном позволяет отправить запрос на URL (CONTRO ller) и обработать возвращаемое значение. Синтаксис выглядит следующим образом:

#javascript 
$.ajax({ 
    url: "your/url", 
    success: function(data) { 
     //stuff here 
    } 
    error: function(data) { 
     //stuff here 
    } 
}); 

Код

Вы хотите загрузить форму, основанную на переменной

Поэтому я хотел бы отправить переменную через «данные» конфиг запрос Ajax к действию. Это позволит нам ответить, что мы должны обработать этот запрос, который мы можем использовать respond_to функцию в Rails

#app/assets/javascripts/application.js 
$("button").on("click", function(e) { 
    e.preventDefault(); 
    $.ajax({ 
     url: "/your/controller/action", 
     data: "your_url", 
    }); 
}); 


#app/controllers/application_controller.rb 
def your_action 
    respond_to do |format| 
     format.js 
    end 
end 

#app/views/controller/action.js.erb 
popUpInfoCenter(<%=j params[:data] %>); 

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

  • Нет связанных вопросов^_^