Как мне загрузить контент с помощью UJS, JQuery и Rails? - PullRequest
1 голос
/ 13 июня 2010

Я пытаюсь найти лучший способ вставить контент в лайтбокс, используя rails UJS.У меня есть ссылка, которая выглядит следующим образом:

<%= link_to "login", login_path, :remote => true %>

, который производит HTML как таковой:

<a data-remote="true" href="/login">login</a>

Так что все это прекрасно работает, и я создал файл вида: user_sessions/new.js.erb который также загружается просто отлично, но мой вопрос, каков предпочтительный метод вставки добавления HTML на страницу?Как будто у меня уже есть форма для входа на страницу не-js, так что я не могу просто загрузить это частичное на страницу?

Любые идеи очень приветствуются.

Ответы [ 2 ]

3 голосов
/ 13 июня 2010

Я не совсем уверен, что понимаю, о чем вы спрашиваете, но в целом вы можете вставить фрагменты HTML в какой-то существующий контейнер, например:

$('div#yourDiv').html(blob_of_HTML);

Вы можете загрузить фрагментов HTML из серверных действий с помощью:

$('div#yourDiv').load(yourURL, function() {
  // stuff to do when the content has been loaded
});

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

$('div#yourDiv').load(yourUrl + ' #something', function() {
  // stuff to do ...
});

Это говорит jQuery взять загруженный контент целой страницы, затем искать «#something» внутри всей этой страницы и загружать только эту часть страницы в целевой контейнер.

1 голос
/ 13 июня 2010

Я закончил делать это, своего рода плагин jQuery, который опирается на ujs:

Это по моему user_sessions/new.js.erb

$(this).modal("<%= escape_javascript(render 'form') %>");

тогда я сделал плагин jQuery как таковой:

jQuery.fn.modal = function(content) {
  var modal_screen = $(document.createElement('div')).addClass("modal_screen");

  var modal_container = $(document.createElement('div')).addClass("modal_container");
  var modal_outer_border = $(document.createElement('div')).addClass("modal_outer_border").appendTo(modal_container);
  var modal_inner_border = $(document.createElement('div')).addClass("modal_inner_border").appendTo(modal_outer_border);
  var modal_contents = $(document.createElement('div')).addClass("modal_contents").appendTo(modal_inner_border);

  $(modal_screen).appendTo('body');
  $(modal_container).appendTo('body');
  $(modal_contents).append(content);
}

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

Дайте мне знать, что вы думаете об этих людях!


Возможно, дополнительный вопрос был бы при создании плагина jQuery, как я могу сделать так, чтобы я мог вызвать плагин просто с $.modal("<%= escape_javascript(render 'form') %>");, без объекта this и просто вызвать метод на самом объекте jQuery?

...